Koskamo

IFSO MCP

An MCP server that allows AI assistants to read IFSO payment conditions, quote fees, list payments, explain payment states, and prepare unsigned transactions for conditional USDG payments on Robinhood Chain.

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.

IFSO MCP logo, by IFSOCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-09Published by IFSO
MCP endpoint (Streamable HTTP)
https://api.ifso.tech/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • List available payment conditions and limits
  • Quote fees for specific condition types
  • Explain the state and deadline of a payment
  • Prepare unsigned transactions for wallet signing

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
ifso 0.1.0+97c3c9be38a9
MCP protocol negotiated in check
2025-06-18
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

IFSO sends USDG on Robinhood Chain that unlocks only if something happens (a date, a price, a result or a referee's OK) and otherwise comes back to the sender. These tools read payments and prepare unsigned data; they never sign or send. Tool names start with ifso_. Start with ifso_list_conditions and ifso_quote_fees, then ifso_prepare_payment; the person signs in their own wallet. ifso_list_payments lists an address's payments and ifso_explain_payment explains one in plain words.

Tools

7 advertised

ifso_version — IFSO build and contracts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Which IFSO build is running, the chain id (Robinhood Chain mainnet is 4663), the address of every contract it uses (payments, conditions, outcome resolver, USDG) and the fee constants in base units and USDG. The same answer as GET /v1/version. Check these addresses before approving anything in a wallet.

ifso_version input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
ifso_version annotations
{
  "title": "IFSO build and contracts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ifso_get_payment — IFSO payment status
Advertised by the server during the last successful anonymous check.
Advertised read-only

The current state of one if-so payment, read from the chain: status (OPEN, MET, RELEASED, RETURNED, VOIDED, CANCELLED), amount in USDG, sender, recipient or claim link key, expiry and the condition that unlocks it. Payment ids are large whole numbers (up to 78 digits); pass them as a string.

ifso_get_payment input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^#?\\d{1,78}$",
      "description": "The payment id as a decimal string, e.g. \"12\" or a 78-digit id."
    }
  },
  "additionalProperties": false
}
ifso_get_payment annotations
{
  "title": "IFSO payment status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ifso_list_conditions — IFSO condition types and limits
Advertised by the server during the last successful anonymous check.
Advertised read-only

The kinds of condition an if-so payment can wait for (a date, a price at or by a deadline, a football league result, a Polymarket question, both people tapping OK, or a named referee), with example commands, the price tickers, the timing rules and the amount limits read from the contract. Use the example command format with ifso_prepare_payment.

ifso_list_conditions input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
ifso_list_conditions annotations
{
  "title": "IFSO condition types and limits",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ifso_prepare_payment — Prepare an IFSO payment (unsigned)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Turns a command like "/ifso 0x... 20 on 2026-12-01" into a plain preview and the UNSIGNED data to create that if-so payment from the sender's own wallet: two transactions (USDG approve, then create) or one gasless authorization to sign. This server never signs, never holds a key and never sends anything; the sender reviews and signs in their own wallet. Same checks as the site's build step.

ifso_prepare_payment input schema
{
  "type": "object",
  "required": [
    "text",
    "sender"
  ],
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "The command, e.g. \"/ifso 0x... 20 on 2026-12-01\" or \"/challenge 0x... 10 if nvda closes above 200 by friday\". See ifso_list_conditions."
    },
    "sender": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "The wallet that sends the USDG and signs."
    },
    "linkKey": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "For a claim link: the address derived from the link secret. Keep the secret yourself; never send it."
    },
    "referee": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "Referee wallet for a referee condition, when not typed in the command."
    },
    "recipient": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "Recipient, when the command says link and you want a fixed recipient instead."
    },
    "altRefundTo": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "Second refund address, used if the sender cannot receive USDG."
    },
    "cancellable": {
      "type": "boolean",
      "description": "Let the sender cancel before anything happens (default false)."
    },
    "tzOffsetMin": {
      "type": "integer",
      "maximum": 840,
      "minimum": -720,
      "description": "The person's UTC offset in minutes for dates (e.g. 240 for UTC+4). Stock deadlines always use New York time."
    }
  },
  "additionalProperties": false
}
ifso_prepare_payment annotations
{
  "title": "Prepare an IFSO payment (unsigned)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
ifso_list_payments — IFSO payments for an address
Advertised by the server during the last successful anonymous check.
Advertised read-only

The if-so payments where an address is the sender or the recipient, newest first, 20 at a time (the same list as the web dashboard, from the IFSO index of the chain, up to the newest 100). Each item has the id, status, amount, the other side and the expiry. Pass nextCursor back as cursor for the next page. For the live chain state of one payment use ifso_get_payment.

ifso_list_payments input schema
{
  "type": "object",
  "required": [
    "address"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "How many payments to return (default and most 20)."
    },
    "cursor": {
      "type": "string",
      "pattern": "^#?\\d{1,78}$",
      "description": "The nextCursor of the previous answer: the list continues after that payment."
    },
    "address": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$",
      "description": "The wallet address to look up (sender or recipient)."
    }
  },
  "additionalProperties": false
}
ifso_list_payments annotations
{
  "title": "IFSO payments for an address",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ifso_quote_fees — IFSO fees for a payment
Advertised by the server during the last successful anonymous check.
Advertised read-only

The fee for an if-so payment of one condition kind (TIME, PRICE, SPORTS, MARKET, APPROVE_PARTIES or APPROVE_REFEREE): the flat creation fee, plus the flat result fee for SPORTS and MARKET, read from the contract (the same numbers as ifso_version). With an amount, also the total the sender approves and whether the amount is inside the contract's limits. Fees are flat and never a share of the amount.

ifso_quote_fees input schema
{
  "type": "object",
  "required": [
    "kind"
  ],
  "properties": {
    "kind": {
      "enum": [
        "TIME",
        "PRICE",
        "SPORTS",
        "MARKET",
        "APPROVE_PARTIES",
        "APPROVE_REFEREE"
      ],
      "type": "string",
      "description": "The condition kind, as in ifso_list_conditions."
    },
    "amount": {
      "type": "string",
      "pattern": "^\\d+(\\.\\d{1,6})?$",
      "description": "Optional amount in USDG, e.g. \"20\" or \"20.5\"."
    }
  },
  "additionalProperties": false
}
ifso_quote_fees annotations
{
  "title": "IFSO fees for a payment",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ifso_explain_payment — Explain an IFSO payment
Advertised by the server during the last successful anonymous check.
Advertised read-only

One if-so payment in plain words, from the same chain read as ifso_get_payment: what it waits for, the deadline, who can do what next (claim, accept, tap OK, decide, settle, send back, cancel) and when and where it comes back if nothing happens. Payment ids are large whole numbers; pass them as a string.

ifso_explain_payment input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^#?\\d{1,78}$",
      "description": "The payment id as a decimal string, e.g. \"12\" or a 78-digit id."
    }
  },
  "additionalProperties": false
}
ifso_explain_payment annotations
{
  "title": "Explain an IFSO payment",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-09: 1 of 1 checks answered
  2. 2026-11-10: 2 of 2 checks answered

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
317 ms
95th percentile latency
317 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 317 ms · metadata changed · 7 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ifso-mcp https://api.ifso.tech/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ifso-mcp --url https://api.ifso.tech/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ifso-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ifso-mcp": {
      "url": "https://api.ifso.tech/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ifso-mcp": {
      "type": "streamableHttp",
      "url": "https://api.ifso.tech/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ifso-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "ifso-mcp": {
      "type": "http",
      "url": "https://api.ifso.tech/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ifso-mcp https://api.ifso.tech/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.ifso.tech/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ifso-mcp": {
      "serverUrl": "https://api.ifso.tech/mcp"
    }
  }
}

Let your agent find its tools

Find servers like IFSO MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.