Koskamo

SAAX Protocol MCP

An MCP server for the Solvent Applied Autonomous Exchange Protocol that enables agent-to-agent commerce by creating verifiable commitment records. It supports signed discovery, preflight checks, buyer acceptance, and settlement linkage for autonomous actors without necessarily moving funds immediately.

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.

SAAX Protocol MCP logo, by SAAX ProtocolCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by SAAX Protocol
You need:Configured-key provider trust requires independent onboardingonboarded buyer keys required
MCP endpoint (Streamable HTTP)
https://www.saax-protocol.com/mcp
Vendor documentation

What its tools do

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

13 of 13 have a description · 0 of 13 declare behavior hints · 9 of 9 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

  • Verify provider capability via signed discovery
  • Create verifiable commitments with agreed terms
  • Accept commitments using onboarded buyer keys
  • Resolve settled transactions back to commitment IDs

Source and maintenance

Community listingRegistry 1.0.3
Maintenance checked

Protocol and capabilities

Server
saax-protocol 1.0.3
MCP protocol negotiated in check
2025-11-25
Tools
13 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

13 advertised

get_protocol_info — Get SAAX Protocol information
Advertised by the server during the last successful anonymous check.

Returns the SAAX Protocol version, available capability count, and the URL to the specification. Call this when an agent needs a one-time overview of the protocol. For pricing, use get_routing_fee. For the full capability list, use list_capabilities. For a liveness check, use ping.

get_protocol_info input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_routing_fee — Get SAAX routing fee
Advertised by the server during the last successful anonymous check.

Returns the current routing fee schedule. Call this before initiating a routing request to determine the expected cost. For capability discovery, use list_capabilities. For protocol overview, use get_protocol_info.

get_routing_fee input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
ping — Ping
Advertised by the server during the last successful anonymous check.

Returns a lightweight liveness response. Call this to verify the endpoint is reachable. Do not use for discovery, capability listing, or pricing — use get_protocol_info, list_capabilities, or get_routing_fee instead.

ping input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
route_request — Route a demand to ranked suppliers
Advertised by the server during the last successful anonymous check.

Submits a capability request and returns ranked supplier matches. Commitment creation with payment runs through the HTTP POST /route endpoint, not this tool. Use list_capabilities first to discover available capabilities. For commitment lookup after routing, use get_commitment.

route_request input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "capability"
  ],
  "properties": {
    "budget": {
      "type": "number",
      "description": "Maximum budget in USDC the buyer will pay"
    },
    "deadline": {
      "type": "number",
      "description": "Deadline in seconds from now for delivery"
    },
    "capability": {
      "type": "string",
      "description": "The capability demanded, e.g. 'security scan'"
    }
  }
}
get_commitment — Get a commitment manifest
Advertised by the server during the last successful anonymous check.

Returns the full commitment object for a given commitment ID — including terms, state, manifest hash, and evidence references. Call this when an agent needs the complete commitment record. For status-only polling, use get_commitment_status. For listing all commitments for a subscriber, use list_commitments.

get_commitment input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "commitmentId"
  ],
  "properties": {
    "commitmentId": {
      "type": "string",
      "description": "The commitment id (0x-prefixed or agent-id style) to look up"
    }
  }
}
list_capabilities — List routed capabilities
Advertised by the server during the last successful anonymous check.

Returns the capabilities currently indexed by the SAAX Router, with supplier counts per capability. Call this to discover what can be routed. For pricing of a specific capability, use get_routing_fee. For protocol overview, use get_protocol_info.

list_capabilities input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_commitments — List commitments for a subscriber
Advertised by the server during the last successful anonymous check.

Returns all commitments associated with a subscription email. Requires an active SAAX Premium subscription. Call this to retrieve commitment history for a subscriber. For a single commitment by ID, use get_commitment. For status-only checks, use get_commitment_status.

list_commitments input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "subscriptionEmail"
  ],
  "properties": {
    "subscriptionEmail": {
      "type": "string",
      "description": "The subscription email (must have an active SAAX Premium subscription)"
    }
  }
}
get_commitment_status — Get a commitment's lifecycle state
Advertised by the server during the last successful anonymous check.

Returns only the current lifecycle state for a given commitment ID, plus the recommended next action for the calling agent. Call this before retrying any commitment that timed out — an unknown outcome is a status check, not another POST. The next_action field tells the agent whether to retry, poll, or stop. For the full commitment record, use get_commitment.

get_commitment_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "commitmentId"
  ],
  "properties": {
    "commitmentId": {
      "type": "string",
      "description": "The commitment id to poll for its lifecycle state"
    }
  }
}
create_commitment — Create a rail-neutral commitment
Advertised by the server during the last successful anonymous check.

Creates a governed commitment between a buyer and a seller and persists it to the SAAX commitment store. The commitment is settlement-rail-neutral: settlementRail is metadata only (x402, mpp, ap2, acp, or unspecified) and is NEVER a prerequisite. Returns the new commitment id (saax_<hash>), createdAt, status, and the settlementRail. Call this BEFORE any payment flow to establish the governed commitment record. Once created, use get_commitment to read the manifest.

create_commitment input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "buyerId",
    "sellerId",
    "terms",
    "acceptanceCriteria"
  ],
  "properties": {
    "terms": {
      "type": "object",
      "required": [
        "deliverable",
        "price",
        "deadline"
      ],
      "properties": {
        "price": {
          "type": "object",
          "required": [
            "amount",
            "currency",
            "decimals"
          ],
          "properties": {
            "amount": {
              "type": "string",
              "description": "Price amount as a decimal string, e.g. '0.10'"
            },
            "currency": {
              "type": "string",
              "description": "Currency symbol, e.g. USDC"
            },
            "decimals": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0,
              "description": "Asset decimals (USDC = 6)"
            }
          }
        },
        "deadline": {
          "type": "string",
          "description": "ISO-8601 deadline for fulfillment"
        },
        "deliverable": {
          "type": "string",
          "description": "The deliverable / capability description"
        }
      },
      "description": "The commercial terms: deliverable, price, deadline"
    },
    "buyerId": {
      "type": "string",
      "description": "The buyer's identity: 0x-address or agent id"
    },
    "sellerId": {
      "type": "string",
      "description": "The seller's identity: 0x-address or agent id"
    },
    "recoveryPolicy": {
      "type": "object",
      "required": [
        "refundOnFailure"
      ],
      "properties": {
        "maxRetries": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0
        },
        "refundOnFailure": {
          "type": "boolean"
        },
        "compensationPercent": {
          "type": "string"
        }
      },
      "description": "Recovery policy on failure"
    },
    "settlementRail": {
      "enum": [
        "x402",
        "mpp",
        "ap2",
        "acp",
        "unspecified"
      ],
      "type": "string",
      "default": "unspecified",
      "description": "The settlement rail as metadata. Never a prerequisite; 'unspecified' is valid."
    },
    "acceptanceCriteria": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Objective acceptance criteria for fulfillment"
    },
    "evidenceRequirements": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Evidence the seller must supply"
    }
  }
}
get_evidence_verification — Verify evidence against acceptance criteria
Advertised by the server during the last successful anonymous check.

Verifies external evidence against a commitment's acceptance criteria. Requires an active SAAX Premium subscription. For authority proof validation, use get_authority_validation.

get_evidence_verification input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "subscriptionEmail",
    "evidence",
    "commitment",
    "criterion"
  ],
  "properties": {
    "evidence": {
      "description": "The evidence object (evidenceId, evidenceType, issuer, subject, payload, payloadHash, signature, verificationScheme, commitmentId, acceptanceCriterionId, ...)"
    },
    "criterion": {
      "description": "The verification policy / acceptance criterion"
    },
    "commitment": {
      "description": "The commitment object the evidence binds to"
    },
    "subscriptionEmail": {
      "type": "string",
      "description": "The subscription email (must have an active SAAX Premium subscription)"
    }
  }
}
get_authority_validation — Validate an authority proof
Advertised by the server during the last successful anonymous check.

Validates an authority proof against a commitment. Requires an active SAAX Premium subscription. For evidence verification, use get_evidence_verification.

get_authority_validation input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "subscriptionEmail",
    "proof",
    "commitment"
  ],
  "properties": {
    "proof": {
      "description": "The AuthorityProof object (proofType, issuer, subject, scope, validFrom, validUntil, signature, verificationScheme, verificationMaterial)"
    },
    "commitment": {
      "description": "The commitment or requested action the proof must authorize"
    },
    "subscriptionEmail": {
      "type": "string",
      "description": "The subscription email (must have an active SAAX Premium subscription)"
    }
  }
}
prepare_commitment — Prepare a free, nonbinding signed proposal (preflight)
Advertised by the server during the last successful anonymous check.

Prepares a free, NONBINDING signed proposal (preflight) for a desired SAAX capability. Validates capability, schema/version/digest, units, and the exact supported network/asset/rail/mode combination; returns a provider-signed proposal binding the request digest and normalized terms. Creates NO agreement, payment, custody deposit, service execution, resource reservation, or spending authority. A provider signature is NOT buyer acceptance. No preflight fee. Errors are typed DSC_* codes.

prepare_commitment input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "profileVersion",
    "capability",
    "schema",
    "units",
    "financialProfile",
    "clientNonce",
    "issuedAt"
  ],
  "properties": {
    "units": {
      "type": "object",
      "required": [
        "amount",
        "unit"
      ],
      "properties": {
        "unit": {
          "type": "string",
          "description": "Explicit unit (e.g. micro-units of settlement asset)"
        },
        "amount": {
          "type": "string",
          "description": "Integer-string settlement amount in the declared unit"
        }
      },
      "description": "Amount + unit"
    },
    "schema": {
      "type": "object",
      "required": [
        "id",
        "version",
        "digest"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Schema id (e.g. https://saax-protocol.com/schemas/commitment-manifest/v1)"
        },
        "digest": {
          "type": "string",
          "description": "sha256:<64 hex> schema digest"
        },
        "version": {
          "type": "string",
          "description": "Schema version"
        }
      },
      "description": "Expected commitment schema"
    },
    "issuedAt": {
      "type": "string",
      "description": "ISO-8601 client timestamp"
    },
    "capability": {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Provider capability id"
        }
      },
      "description": "Desired capability"
    },
    "clientNonce": {
      "type": "string",
      "minLength": 8,
      "description": "Caller-chosen nonce (echoed; replay idempotency)"
    },
    "constraints": {
      "type": "object",
      "properties": {
        "deadline": {
          "type": "string",
          "description": "ISO-8601 deadline"
        },
        "maxAmount": {
          "type": "string",
          "description": "Integer-string max amount"
        }
      },
      "description": "Optional constraints"
    },
    "profileVersion": {
      "type": "string",
      "description": "SAAX Discovery profile version (e.g. 1.0.0)"
    },
    "intendedParties": {
      "type": "object",
      "properties": {
        "buyer": {
          "type": "string",
          "description": "0x buyer address"
        },
        "seller": {
          "type": "string",
          "description": "0x seller address"
        }
      },
      "description": "Intended parties"
    },
    "financialProfile": {
      "type": "object",
      "required": [
        "network",
        "asset",
        "rail",
        "mode"
      ],
      "properties": {
        "mode": {
          "type": "string",
          "description": "Payment mode"
        },
        "rail": {
          "type": "string",
          "description": "Rail: x402, mpp, ap2, acp, ach, card, internal-ledger, unknown"
        },
        "asset": {
          "type": "string",
          "description": "CAIP-19 asset id"
        },
        "network": {
          "type": "string",
          "description": "CAIP-2 network id (e.g. eip155:8453)"
        }
      },
      "description": "Financial axes"
    }
  }
}
accept_commitment — Accept a signed proposal and create exactly one authenticated commitment
Advertised by the server during the last successful anonymous check.

Accepts a signed preflight proposal with explicit buyer authorization and creates exactly ONE authenticated SAAX commitment. Revalidates the proposal (trusted provider key, profile version, expiry, combination, manifest digest), verifies the BUYER'S SIGNATURE over the exact proposal digest and terms digest, durably accepts once (single-writer store), and returns the operation + commitment. Creates NO payment authorization, custody funding, service execution, or release. A buyer acceptance is NOT a payment authorization or evaluator release verdict. Errors are typed DSC_* codes. Idempotent: same idempotencyKey + same request returns the same operation; same key + different request -> DSC_NONCE_CONFLICT; a single-use proposal cannot be re-accepted under a new key -> DSC_PROPOSAL_REUSED.

accept_commitment input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "proposal",
    "acceptance",
    "idempotencyKey"
  ],
  "properties": {
    "proposal": {
      "type": "object",
      "description": "The signed proposal returned by prepare_commitment (full object incl. signature)",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "acceptance": {
      "type": "object",
      "description": "The buyer acceptance contract (schemaVersion acceptance-v1, action accept_commitment, domain saax:acceptance:v1, signed by the buyer)",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 8,
      "description": "Caller-scoped idempotency key (>= 8 chars)"
    }
  }
}

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 (1 of 1 answered).

  1. 2026-11-07: 1 of 1 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
1605 ms
95th percentile latency
1605 ms

Maintenance history

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

  • · probe · passed · 1605 ms · metadata changed · 13 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 saax-protocol-mcp https://www.saax-protocol.com/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 saax-protocol-mcp --url https://www.saax-protocol.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable saax-protocol-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "saax-protocol-mcp": {
      "url": "https://www.saax-protocol.com/mcp"
    }
  }
}

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start saax-protocol-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "saax-protocol-mcp": {
      "type": "http",
      "url": "https://www.saax-protocol.com/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 saax-protocol-mcp https://www.saax-protocol.com/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://www.saax-protocol.com/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": {
    "saax-protocol-mcp": {
      "serverUrl": "https://www.saax-protocol.com/mcp"
    }
  }
}

Let your agent find its tools

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