IoMarkets.tech MCP
Remote MCP server providing tools to validate ISO 20022 messages, verify execution reports, check tokenized asset contracts, and retrieve corporate actions data for AI agents.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://iomarkets.tech/mcpWhat you can do with it
- Validate ISO 20022 messages against schema and business rules
- Verify execution report signatures and payment proofs
- Check if a token contract is the official tokenized fund
- Retrieve corporate actions like dividends and splits
Source and maintenance
Protocol and capabilities
- Server
- iomarkets-tech 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 23 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
23 advertised
get_overview — What IoMarkets.tech is
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.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_guide — How to do something on the site
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.
{
"type": "object",
"properties": {
"task": {
"enum": [
"look-around",
"check-message",
"try-samples",
"bench-ci",
"check-token",
"holdings-week",
"token-events",
"verify-proof",
"check-execution-report",
"data-api",
"console",
"own-assistant"
],
"type": "string",
"description": "Which task. Leave out to list them all."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}explain_term — Explain a word or an ISO 20022 tag
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.
{
"type": "object",
"properties": {
"term": {
"type": "string",
"description": "The word or tag to explain."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}list_messages — Messages the Test Bench checks
The ISO 20022 message types and versions the Test Bench checks, with what each is for.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}validate_message — Check an ISO 20022 message
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.
{
"type": "object",
"required": [
"xml"
],
"properties": {
"xml": {
"type": "string",
"description": "The whole message, as XML text. A <Document> inside an envelope with an AppHdr is fine."
},
"message": {
"enum": [
"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",
"seev.031.001.14"
],
"type": "string",
"description": "Check as this message type instead of the one its namespace names (optional)."
},
"schema_only": {
"type": "boolean",
"description": "Skip business rules (optional, default false)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}explain_issue — Explain a Test Bench issue code
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.
{
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The issue code from a report."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}list_samples — Sample messages
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.
{
"type": "object",
"properties": {
"message": {
"enum": [
"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",
"seev.031.001.14"
],
"type": "string",
"description": "Only samples of this message type (optional)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_sample — One sample message
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.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"enum": [
"pacs.008-valid",
"pacs.009-valid",
"pacs.002-valid",
"pacs.004-valid",
"pain.001-valid",
"camt.053-valid",
"camt.054-valid",
"seev.031-valid",
"pacs.008-in-envelope",
"pacs.008-missing-charge-bearer",
"pacs.008-msgid-too-long",
"pacs.008-lowercase-currency",
"pacs.008-out-of-order",
"pacs.008-impossible-date",
"pacs.008-unknown-element",
"pacs.008-bad-uetr",
"pacs.008-unclosed-tag",
"pacs.008-iban-checksum",
"pacs.008-bic-country",
"pacs.008-lei-checksum",
"pacs.008-count-mismatch",
"pacs.008-no-settlement-date",
"pacs.008-yen-decimals",
"pacs.008-fx-without-rate",
"pacs.009-total-mismatch",
"pacs.009-cover-without-reimbursement",
"pain.001-control-sum",
"pain.001-cheque-with-account",
"camt.053-balance-mismatch",
"camt.053-entry-count",
"seev.031-isin-check-digit",
"seev.031-paid-before-record-date",
"seev.031-two-statuses",
"seev.031-dividend-without-cash",
"pacs.002-status-too-long",
"pacs.002-accepted-but-rejected",
"pacs.002-narrative-without-text",
"pacs.002-original-group-twice",
"pacs.004-missing-returned-amount",
"pacs.004-total-mismatch",
"pacs.004-charges-without-instructed-amount",
"pacs.004-group-return-with-transactions",
"pacs.004-fx-without-rate",
"camt.054-credit-spelled-out",
"camt.054-entry-sum",
"camt.054-two-paginations",
"camt.054-empty-bank-code",
"pacs.008-unsupported-version"
],
"type": "string",
"description": "The sample id, from list_samples."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}list_data_endpoints — Data API routes and prices
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).
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_api_status — Is the Data API up?
Whether the Data API at https://api.iomarkets.tech is answering right now, from its /health check.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}estimate_data_api_cost — Estimate Data API spend
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.
{
"type": "object",
"properties": {
"candles": {
"type": "number",
"description": "Calls a month to /v1/candles (Candles)."
},
"proof_price": {
"type": "number",
"description": "Calls a month to /v1/proof/price (Price proof)."
},
"signal_vwap": {
"type": "number",
"description": "Calls a month to /v1/signal/vwap (VWAP signal)."
},
"proof_execution": {
"type": "number",
"description": "Calls a month to /v1/proof/execution (Execution proof)."
},
"signal_imbalance": {
"type": "number",
"description": "Calls a month to /v1/signal/imbalance (Order imbalance)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}verify_proof — Check a Data API proof
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).
{
"type": "object",
"required": [
"proof"
],
"properties": {
"proof": {
"type": "string",
"description": "The proof as JSON text: { \"payload\": {…}, \"signature\": \"…\" }."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}explain_execution_request — How to call the execution-quality audit
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.
{
"type": "object",
"properties": {
"body": {
"type": "string",
"description": "A draft request body as JSON text, { \"pair\": \"BTC-USDC\", \"fills\": [...] }, to check before paying (optional)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}verify_execution_report — Check an execution-quality report
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.
{
"type": "object",
"required": [
"report"
],
"properties": {
"report": {
"type": "string",
"description": "The response body as JSON text, exactly as received: { \"audit\": [...], \"summary\": {...}, \"attestation\": { \"payload\": {...}, \"signature\": \"…\" } }."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}check_token_contract — Is this the real tokenized security?
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).
{
"type": "object",
"required": [
"chain",
"address"
],
"properties": {
"chain": {
"enum": [
"ethereum",
"polygon",
"arbitrum",
"avalanche",
"base",
"bnb",
"mantle",
"plume",
"sei",
"tempo",
"optimism",
"ink",
"monad",
"hyperevm",
"xlayer",
"etherlink",
"arc",
"robinhood",
"solana",
"stellar",
"aptos",
"sui",
"xrpl",
"noble",
"ton",
"tron",
"starknet"
],
"type": "string",
"description": "The chain the contract is on."
},
"symbol": {
"type": "string",
"description": "The symbol the token shows (optional), to catch impostors."
},
"address": {
"type": "string",
"description": "The contract: 0x address, Solana mint, Stellar CODE:ISSUER, Aptos/Sui type tag, …"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}list_tokenized_assets — Tokenized securities in the map
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.
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Filter text (optional)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_tokenized_asset — One tokenized security
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.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"enum": [
"franklin-fobxx",
"franklin-onchain-lux-ib",
"franklin-onchain-lux-ab-ddis",
"franklin-onchain-sg-usd-st",
"ondo-ousg",
"ondo-usdy",
"superstate-ustb",
"superstate-uscc",
"superstate-cushy",
"superstate-vbdc",
"superstate-fwdi",
"circle-usyc",
"spiko-ustbl",
"spiko-eutbl",
"spiko-uktbl",
"spiko-spkcc",
"spiko-eurspkcc",
"spiko-safo",
"spiko-eursafo",
"spiko-gbpsafo",
"spiko-chfsafo",
"xstocks-strcx",
"xstocks-mstrx",
"xstocks-crclx",
"xstocks-tslax",
"xstocks-spcxx",
"xstocks-spyx",
"xstocks-googlx",
"xstocks-qqqx",
"xstocks-nvdax",
"xstocks-sndkx",
"xstocks-mux",
"xstocks-coinx",
"xstocks-aaplx",
"xstocks-skhyx",
"xstocks-gldx",
"xstocks-intcx",
"xstocks-metax",
"xstocks-soxlx",
"xstocks-hoodx",
"xstocks-amznx",
"xstocks-msftx",
"xstocks-avgox",
"xstocks-mrvlx",
"xstocks-amdx",
"xstocks-tsmx",
"xstocks-orclx",
"xstocks-ewyx",
"xstocks-jaaax",
"xstocks-tqqqx",
"xstocks-bmnrx",
"ondo-stocks-aaplon",
"ondo-stocks-amdon",
"ondo-stocks-amznon",
"ondo-stocks-avgoon",
"ondo-stocks-bmnron",
"ondo-stocks-coinon",
"ondo-stocks-crclon",
"ondo-stocks-ewyon",
"ondo-stocks-gldon",
"ondo-stocks-googlon",
"ondo-stocks-hoodon",
"ondo-stocks-intcon",
"ondo-stocks-jaaaon",
"ondo-stocks-metaon",
"ondo-stocks-mrvlon",
"ondo-stocks-msfton",
"ondo-stocks-mstron",
"ondo-stocks-muon",
"ondo-stocks-nvdaon",
"ondo-stocks-orclon",
"ondo-stocks-qqqon",
"ondo-stocks-skhyon",
"ondo-stocks-sndkon",
"ondo-stocks-spyon",
"ondo-stocks-strcon",
"ondo-stocks-tqqqon",
"ondo-stocks-tslaon",
"ondo-stocks-tsmon",
"ondo-stocks-soxlon",
"ondo-stocks-spcxon"
],
"type": "string",
"description": "The entry id, from list_tokenized_assets."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}verify_asset_with_issuer — Check an entry against the issuer, live
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.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"enum": [
"franklin-fobxx",
"franklin-onchain-lux-ib",
"franklin-onchain-lux-ab-ddis",
"franklin-onchain-sg-usd-st",
"ondo-ousg",
"ondo-usdy",
"superstate-ustb",
"superstate-uscc",
"superstate-cushy",
"superstate-vbdc",
"superstate-fwdi",
"circle-usyc",
"spiko-ustbl",
"spiko-eutbl",
"spiko-uktbl",
"spiko-spkcc",
"spiko-eurspkcc",
"spiko-safo",
"spiko-eursafo",
"spiko-gbpsafo",
"spiko-chfsafo",
"xstocks-strcx",
"xstocks-mstrx",
"xstocks-crclx",
"xstocks-tslax",
"xstocks-spcxx",
"xstocks-spyx",
"xstocks-googlx",
"xstocks-qqqx",
"xstocks-nvdax",
"xstocks-sndkx",
"xstocks-mux",
"xstocks-coinx",
"xstocks-aaplx",
"xstocks-skhyx",
"xstocks-gldx",
"xstocks-intcx",
"xstocks-metax",
"xstocks-soxlx",
"xstocks-hoodx",
"xstocks-amznx",
"xstocks-msftx",
"xstocks-avgox",
"xstocks-mrvlx",
"xstocks-amdx",
"xstocks-tsmx",
"xstocks-orclx",
"xstocks-ewyx",
"xstocks-jaaax",
"xstocks-tqqqx",
"xstocks-bmnrx",
"ondo-stocks-aaplon",
"ondo-stocks-amdon",
"ondo-stocks-amznon",
"ondo-stocks-avgoon",
"ondo-stocks-bmnron",
"ondo-stocks-coinon",
"ondo-stocks-crclon",
"ondo-stocks-ewyon",
"ondo-stocks-gldon",
"ondo-stocks-googlon",
"ondo-stocks-hoodon",
"ondo-stocks-intcon",
"ondo-stocks-jaaaon",
"ondo-stocks-metaon",
"ondo-stocks-mrvlon",
"ondo-stocks-msfton",
"ondo-stocks-mstron",
"ondo-stocks-muon",
"ondo-stocks-nvdaon",
"ondo-stocks-orclon",
"ondo-stocks-qqqon",
"ondo-stocks-skhyon",
"ondo-stocks-sndkon",
"ondo-stocks-spyon",
"ondo-stocks-strcon",
"ondo-stocks-tqqqon",
"ondo-stocks-tslaon",
"ondo-stocks-tsmon",
"ondo-stocks-soxlon",
"ondo-stocks-spcxon"
],
"type": "string",
"description": "The entry id."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}list_corporate_actions — Dividends, splits and mergers
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).
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "Last day, YYYY-MM-DD (optional)."
},
"from": {
"type": "string",
"description": "First day, YYYY-MM-DD (optional)."
},
"types": {
"type": "array",
"items": {
"enum": [
"dividend",
"split",
"reverse-split",
"merger"
],
"type": "string"
},
"description": "Kinds of event (optional)."
},
"holdings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tickers, SEC CIKs or FIGIs (optional; none means every company)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}holdings_calendar — What affects my holdings this week
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.
{
"type": "object",
"required": [
"holdings"
],
"properties": {
"day": {
"type": "string",
"description": "Any day in the week, YYYY-MM-DD (optional; today by default)."
},
"holdings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tickers, SEC CIKs or FIGIs."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_corporate_action — One corporate action, with its seev.031 message
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).
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The event id, from list_corporate_actions or holdings_calendar."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}token_corporate_actions — What is coming for the stock behind this token
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.
{
"type": "object",
"required": [
"chain",
"address"
],
"properties": {
"chain": {
"enum": [
"ethereum",
"polygon",
"arbitrum",
"avalanche",
"base",
"bnb",
"mantle",
"plume",
"sei",
"tempo",
"optimism",
"ink",
"monad",
"hyperevm",
"xlayer",
"etherlink",
"arc",
"robinhood",
"solana",
"stellar",
"aptos",
"sui",
"xrpl",
"noble",
"ton",
"tron",
"starknet"
],
"type": "string",
"description": "The chain the token is on."
},
"address": {
"type": "string",
"description": "The token contract."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}get_roadmap — What is built and what is next
What IoMarkets.tech has built and is building next, in the same words as iomarkets.org/roadmap.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 500 ms
- 95th percentile latency
- 500 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 500 ms · metadata changed · 23 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http iomarkets-tech-mcp https://iomarkets.tech/mcpCodex
codex mcp add iomarkets-tech-mcp --url https://iomarkets.tech/mcpCursor
{
"mcpServers": {
"iomarkets-tech-mcp": {
"url": "https://iomarkets.tech/mcp"
}
}
}Cline
{
"mcpServers": {
"iomarkets-tech-mcp": {
"type": "streamableHttp",
"url": "https://iomarkets.tech/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"iomarkets-tech-mcp": {
"type": "http",
"url": "https://iomarkets.tech/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http iomarkets-tech-mcp https://iomarkets.tech/mcpClaude Desktop
{
"mcpServers": {
"iomarkets-tech-mcp": {
"url": "https://iomarkets.tech/mcp"
}
}
}Windsurf
{
"mcpServers": {
"iomarkets-tech-mcp": {
"serverUrl": "https://iomarkets.tech/mcp"
}
}
}Let your agent find its tools
Find servers like IoMarkets.tech MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.