Skip to content

IoMarkets.tech ISO 20022 Test Bench

io.github.SergoVashakmadze/iomarkets-techSergoVashakmadzestreamable-httpv1.0.0Scanned

Check ISO 20022 messages (pacs.008, pain.001, camt.053, seev.031) against schema and rules.

23 tools: 7 change things and 16 only read.

Tools: 0 delete, 0 irreversible, 7 write, 16 read.
  • Reads private data · 5
  • Reads text others write · 9
  • Can send data out · 0
  • 1 finding

Tools listed without sign-in. Remote posture

Anlyon alternative

7 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

23 tools

Changes things 7Claude Code: ask
  • check_token_contractCheck a token contract against the Tokenized Asset Map: is it the issuer's own contract for a tokenized fund or security on that chain?No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check a token contract against the Tokenized Asset Map: is it the issuer's own contract for a tokenized fund or security on that chain? Verdicts: official, other-chain (the address is listed, but on another chain), impostor (a listed symbol on this chain, a different contract), unknown (not in the map, which says nothing either way).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • estimate_data_api_costWhat a monthly volume of Data API calls costs at the per-call x402 prices, against the indicative subscription plans.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What a monthly volume of Data API calls costs at the per-call x402 prices, against the indicative subscription plans. Give calls per month for each route; routes left out count as zero.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • explain_issueWhat a Test Bench issue code (such as IBAN_CHECKSUM, BALANCE_MISMATCH or OUT_OF_ORDER) means and how to fix it.1 finding

    Why it is in this group

    • The name "explain_issue" says "explain": a word for reading.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "explain_issue" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "explain_issue" says "explain": a word for reading.

      What this check looks for
    Description, as the server wrote it
    What a Test Bench issue code (such as IBAN_CHECKSUM, BALANCE_MISMATCH or OUT_OF_ORDER) means and how to fix it. Without a code, lists every code.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • holdings_calendarFor a list of holdings (tickers, CIKs or FIGIs), every ex-date, record date, payment date and effective date in one week, day by day.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    For a list of holdings (tickers, CIKs or FIGIs), every ex-date, record date, payment date and effective date in one week, day by day. The week holding `day`, Monday to Sunday; this week by default. Ends with an iCalendar (webcal) subscription URL for those holdings, to give the user for their calendar app.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • token_corporate_actionsFor a token contract that the Asset Map lists as a tokenized stock or ETF (such as an xStock): the security it tracks, and that security's dividends, splits and mergers from the co…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    For a token contract that the Asset Map lists as a tokenized stock or ETF (such as an xStock): the security it tracks, and that security's dividends, splits and mergers from the corporate actions feed, each with what it does to the token. Answers 'I hold this token; what is coming?' in one call.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • verify_execution_reportCheck the whole JSON that POST https://api.iomarkets.tech/v1/proof/execution returned ({ audit, summary, attestation }): that the ed25519 signature matches the published IoMarkets …Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Check the whole JSON that POST https://api.iomarkets.tech/v1/proof/execution returned ({ audit, summary, attestation }): that the ed25519 signature matches the published IoMarkets key, that its USDC payment is confirmed on Algorand mainnet (a public indexer IoMarkets does not run), that the rows hash to the signed audit_sha256, and that every row and the summary recompute with the API's own scoring, against the last trade and against the arrival mid (side-aware cost, qty-weighted averages, spread, matched and unmatched fills). The same checks as the page at https://iomarkets.tech/execution-check. Returns each check, and the recomputed summary as structured data.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • verify_proofCheck a signed proof (the { payload, signature } JSON a Data API proof route returns): that the ed25519 signature matches the published IoMarkets key, and that its USDC payment is …Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Check a signed proof (the { payload, signature } JSON a Data API proof route returns): that the ed25519 signature matches the published IoMarkets key, and that its USDC payment is confirmed on Algorand mainnet (looked up on a public indexer IoMarkets does not run).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
Only reads 16Show 16 read-only tools
  • explain_execution_requestExactly how to call POST https://api.iomarkets.tech/v1/proof/execution, the paid best-execution audit: the body (pair, one of BTC-USDC, ETH-USDC, SOL-USDC, and fills: ts, fill_pric…No findings

    Why it is in this group

    • The name "explain_execution_request" says "explain": a word for reading.
    Description, as the server wrote it
    Exactly how to call POST https://api.iomarkets.tech/v1/proof/execution, the paid best-execution audit: the body (pair, one of BTC-USDC, ETH-USDC, SOL-USDC, and fills: ts, fill_price, qty, side), the limits (fills per call, how old a fill may be, how close the market trade must be), the price, what comes back, and the answers that are not charged (400 for a bad body or an unsupported pair, 422 when no fill matches a trade). Give a draft body to check it with the API's own validation first. Read from the API's code; this tool calls nothing and pays nothing.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • explain_termA plain-English meaning of a word used on the site (ISO 20022, schema, IBAN, BIC, LEI, ISIN, UETR, CBPR+, x402, signed proof, MCP…) or of an ISO 20022 XML tag abbreviation such as …No findings

    Why it is in this group

    • The name "explain_term" says "explain": a word for reading.
    Description, as the server wrote it
    A plain-English meaning of a word used on the site (ISO 20022, schema, IBAN, BIC, LEI, ISIN, UETR, CBPR+, x402, signed proof, MCP…) or of an ISO 20022 XML tag abbreviation such as GrpHdr, CdtrAcct or IntrBkSttlmAmt. Without a term, lists the words.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_api_statusWhether the Data API at https://api.iomarkets.tech is answering right now, from its /health check.Reads text others writeNo findings

    Why it is in this group

    • The name "get_api_status" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "http": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Whether the Data API at https://api.iomarkets.tech is answering right now, from its /health check.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true
  • get_corporate_actionOne event in full: every date and term, the filing and the sentence or table row it came from, tokenized versions in the Asset Map, and the event as an ISO 20022 seev.031.001.14 no…Reads private dataNo findings

    Why it is in this group

    • The name "get_corporate_action" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "table": it reads databases.
    Description, as the server wrote it
    One event in full: every date and term, the filing and the sentence or table row it came from, tokenized versions in the Asset Map, and the event as an ISO 20022 seev.031.001.14 notification (checked by the Test Bench).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_guideStep-by-step instructions, with the exact button names, for one task on iomarkets.tech (checking a message, CI, verifying a proof, calling the Data API…).Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_guide" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "message": it reads messages.
    • untrusted-inputThe description's first sentence says "message": it reads messages, which other people can write.
    Description, as the server wrote it
    Step-by-step instructions, with the exact button names, for one task on iomarkets.tech (checking a message, CI, verifying a proof, calling the Data API…). Without a task, lists the tasks.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_overviewWhat IoMarkets.tech is and what is built: the ISO 20022 Test Bench, the Data API (market data for AI agents, paid per request over x402), the main pages, and what comes next.No findings

    Why it is in this group

    • The name "get_overview" says "get": a word for reading.
    Description, as the server wrote it
    What IoMarkets.tech is and what is built: the ISO 20022 Test Bench, the Data API (market data for AI agents, paid per request over x402), the main pages, and what comes next.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_roadmapWhat IoMarkets.tech has built and is building next, in the same words as iomarkets.org/roadmap.No findings

    Why it is in this group

    • The name "get_roadmap" says "get": a word for reading.
    Description, as the server wrote it
    What IoMarkets.tech has built and is building next, in the same words as iomarkets.org/roadmap.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_sampleThe XML of one sample message from list_samples, to use as a starting point or in tests.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_sample" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "message": it reads messages.
    • untrusted-inputThe description's first sentence says "message": it reads messages, which other people can write.
    Description, as the server wrote it
    The XML of one sample message from list_samples, to use as a starting point or in tests. Every party and account in it is made up.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • get_tokenized_assetOne Asset Map entry in full: the security, every token contract chain by chain, the issuer sources each comes from, and whether its IoMarkets signature verifies.No findings

    Why it is in this group

    • The name "get_tokenized_asset" says "get": a word for reading.
    Description, as the server wrote it
    One Asset Map entry in full: the security, every token contract chain by chain, the issuer sources each comes from, and whether its IoMarkets signature verifies.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_corporate_actionsCorporate actions of US-listed companies from their own SEC EDGAR filings (8-Ks of US companies, 6-Ks of foreign private issuers): cash dividends (amount in the stated currency, pe…No findings

    Why it is in this group

    • The name "list_corporate_actions" says "list": a word for reading.
    Description, as the server wrote it
    Corporate actions of US-listed companies from their own SEC EDGAR filings (8-Ks of US companies, 6-Ks of foreign private issuers): cash dividends (amount in the stated currency, per share or per ADS, ex, record and payment dates), stock splits, reverse splits and completed mergers (cash or shares per share). Filter by holdings (tickers, CIKs or FIGIs), by days (any of an event's dates between from and to) and by type. Each event links its filing and the sentence or table row it was read from. Also gives the iCalendar subscription URL for the same holdings and types (calendarUrl in structuredContent).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_data_endpointsThe Data API routes at https://api.iomarkets.tech, what each returns and its price per call in USDC, with how an AI agent pays (x402 on Algorand mainnet, no account).Reads text others writeNo findings

    Why it is in this group

    • The name "list_data_endpoints" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "http": it reads web pages, which anyone can write.
    Description, as the server wrote it
    The Data API routes at https://api.iomarkets.tech, what each returns and its price per call in USDC, with how an AI agent pays (x402 on Algorand mainnet, no account).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_messagesThe ISO 20022 message types and versions the Test Bench checks, with what each is for.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_messages" says "list": a word for reading.

    What it can reach

    • private-dataThe name "list_messages" says "list" and "message": it reads messages.
    • private-dataThe description's first sentence says "message": it reads messages.
    • untrusted-inputThe name "list_messages" says "list" and "message": it reads messages, which other people can write.
    • untrusted-inputThe description's first sentence says "message": it reads messages, which other people can write.
    Description, as the server wrote it
    The ISO 20022 message types and versions the Test Bench checks, with what each is for.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_samplesThe Test Bench sample library: a valid message of each type and broken ones, each with the issue code it raises.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_samples" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "message": it reads messages.
    • untrusted-inputThe description's first sentence says "message": it reads messages, which other people can write.
    Description, as the server wrote it
    The Test Bench sample library: a valid message of each type and broken ones, each with the issue code it raises. Use get_sample for the XML.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • list_tokenized_assetsThe securities in the Tokenized Asset Map with their identifiers (FIGI, ISIN where the issuer gives it) and the chains they are tokenized on.No findings

    Why it is in this group

    • The name "list_tokenized_assets" says "list": a word for reading.
    Description, as the server wrote it
    The securities in the Tokenized Asset Map with their identifiers (FIGI, ISIN where the issuer gives it) and the chains they are tokenized on. Optionally filter by issuer, name, symbol, ticker, ISIN or FIGI.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • validate_messageCheck one ISO 20022 XML message (pacs.008.001.08, pacs.009.001.08, pacs.002.001.10, pacs.004.001.09, pain.001.001.09, camt.053.001.08, camt.054.001.08 or seev.031.001.14) against t…No findings

    Why it is in this group

    • The name "validate_message" says "validate": a word for reading.
    Description, as the server wrote it
    Check one ISO 20022 XML message (pacs.008.001.08, pacs.009.001.08, pacs.002.001.10, pacs.004.001.09, pain.001.001.09, camt.053.001.08, camt.054.001.08 or seev.031.001.14) against the official base schema, then business rules (check digits, totals, cross-element rules, market practice). Returns valid or not, and every problem with its line, element path, stable code and a plain reason. The message type is read from the namespace. The message is checked and not stored. Same code as https://iomarkets.tech/test-bench.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • verify_asset_with_issuerFetch the issuer's own sources for one Asset Map entry now (its contracts page, its public API, or its stellar.toml) and confirm every listed contract is still there, so trust need…Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Fetch the issuer's own sources for one Asset Map entry now (its contracts page, its public API, or its stellar.toml) and confirm every listed contract is still there, so trust needn't rest on IoMarkets.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data5
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write9
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Tools listed without sign-in

Looked at Oct 30, 2026, 22:19 UTC, unchanged since Oct 30, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
7
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
not observed
RFC 9728 protected resource metadata
not observed
Authorization servers
not observed
Legacy HTTP+SSE transport
no
Dynamic client registration
not observed
Client ID metadata documents
not observed
  • WarnThe whole server

    The endpoint served tools/list without credentials, and the list has 7 tools that change things (7 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://iomarkets.tech/mcp: tools/list returned 23 tools to an anonymous client, including explain_issue (write), estimate_data_api_cost (write), verify_proof (write), verify_execution_report (write), check_token_contract (write) and 2 more

    What this check looks for

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "explain_issue" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "explain_issue" says "explain": a word for reading.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http iomarkets-tech https://iomarkets.tech/mcp
claude mcp add --transport http iomarkets-tech https://iomarkets.tech/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__iomarkets-tech__get_overview",
      "mcp__iomarkets-tech__get_guide",
      "mcp__iomarkets-tech__explain_term",
      "mcp__iomarkets-tech__list_messages",
      "mcp__iomarkets-tech__validate_message",
      "mcp__iomarkets-tech__list_samples",
      "mcp__iomarkets-tech__get_sample",
      "mcp__iomarkets-tech__list_data_endpoints",
      "mcp__iomarkets-tech__get_api_status",
      "mcp__iomarkets-tech__explain_execution_request",
      "mcp__iomarkets-tech__list_tokenized_assets",
      "mcp__iomarkets-tech__get_tokenized_asset",
      "mcp__iomarkets-tech__verify_asset_with_issuer",
      "mcp__iomarkets-tech__list_corporate_actions",
      "mcp__iomarkets-tech__get_corporate_action",
      "mcp__iomarkets-tech__get_roadmap"
    ],
    "ask": [
      "mcp__iomarkets-tech__explain_issue",
      "mcp__iomarkets-tech__estimate_data_api_cost",
      "mcp__iomarkets-tech__verify_proof",
      "mcp__iomarkets-tech__verify_execution_report",
      "mcp__iomarkets-tech__check_token_contract",
      "mcp__iomarkets-tech__holdings_calendar",
      "mcp__iomarkets-tech__token_corporate_actions"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as iomarkets-tech. Review it before you use it.

Capability tags behind 10 rules
  • mcp__iomarkets-tech__get_guide private-data, untrusted-input
  • mcp__iomarkets-tech__list_messages private-data, untrusted-input
  • mcp__iomarkets-tech__list_samples private-data, untrusted-input
  • mcp__iomarkets-tech__get_sample private-data, untrusted-input
  • mcp__iomarkets-tech__list_data_endpoints untrusted-input
  • mcp__iomarkets-tech__get_api_status untrusted-input
  • mcp__iomarkets-tech__verify_proof untrusted-input
  • mcp__iomarkets-tech__verify_execution_report untrusted-input
  • mcp__iomarkets-tech__verify_asset_with_issuer untrusted-input
  • mcp__iomarkets-tech__get_corporate_action private-data

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.github.SergoVashakmadze/iomarkets-tech/verify?hash=dd1101d9d271180a178a7ad77a492d97a62002e02fcc43d83c1a543bb9503733" | jq -e '.changed == false'

Pinned hash dd1101d9d271, from Oct 30, 2026, 22:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.github.SergoVashakmadze/iomarkets-tech/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.SergoVashakmadze/iomarkets-tech
[![anlyon.dev](https://anlyon.dev/badge/io.github.SergoVashakmadze/iomarkets-tech.svg)](https://anlyon.dev/servers/io.github.SergoVashakmadze/iomarkets-tech)

Source: MCP Registry. Synced Oct 30, 2026, 22:17 UTC.