Surface Contract: platform API behavior and x402 pre-payment checks

dev.workers.penny-mcamp.penny-surface-contractPublished by penny-surface-contract.penny-mcamp.workers.devOfficial publisherv2026.10.22Updated Oct 24, 2026

Surface contracts: API behavior evidence, x402 pre-payment check, MCP server preflight

VerifiedStreamable HTTPWeb executableDeveloper Tools

Overview

Surface Contract: platform API behavior and x402 pre-payment checks's hosted MCP server (penny-surface-contract.penny-mcamp.workers.dev), published by penny-surface-contract.penny-mcamp.workers.dev; no sign-in required; Streamable HTTP; 7 tools.

No AI overview yet: these facts come from the registry entry and the server itself.

Publisher
penny-surface-contract.penny-mcamp.workers.dev
Endpoint
penny-surface-contract.penny-mcamp.workers.dev
Last checked

Installation

In SourceWeft

  1. Open Surface Contract: platform API behavior and x402 pre-payment checks in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/dev.workers.penny-mcamp.penny-surface-contract%2Fsurface-contract/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "surface-contract-platform-api-behavior-a": {
      "type": "http",
      "url": "https://penny-surface-contract.penny-mcamp.workers.dev/mcp"
    }
  }
}

Tools

7

list_surface_contracts

List the platform surface contracts published in Penny's free registry, with claim counts.

Takes no parameters.

get_surface_contract

Get the machine-readable surface contract for a platform host (read/write semantics, pending states, rate limits, limits, idempotency, pagination completeness, data portability), each claim carrying its evidence and its verification status.

Parametersidrequired

verify_surface

Run the anonymous conformance checks for a contract now and return verified / failed / unknown / manual / unsupported per claim.

Parametersidrequired

contribute_discrepancy

Report a platform behaviour that contradicts a published claim, or a new claim, with evidence. One-line call: POST /v1/contribute with {contractId, kind, statement, evidence[], reporter, observedAt}. Stored as pending; a published contract is never changed without independent verification. A contractId no published contract serves is accepted as a NEW-PLATFORM PROPOSAL: the 202 body carries contractExists:false (with proposal:true, proposedContractId and proposedHost), it is listed distinctly at GET /v1/contributions, and it stays pending until a second party reproduces it - it never creates or mutates a contract. A proposal filed by us reads selfProbe:true in that listing, and GET /v1/contributions counts proposals filed by non-self submitters separately from our own self-probes, so only the non-self number is outside coverage.

ParameterskindrequiredclaimIdevidencerequiredreporterstatementrequiredcontractIdrequiredobservedAt

get_integration_recipe

Get a plain-text integration recipe for a platform: the order of operations to use it, and a guard clause for every behaviour we measured going wrong, each naming the contract claim behind it. Derived from the contract, so it cannot drift from it.

Parametersidrequired

preflight_mcp_server

Run the anonymous MCP handshake against ANY https MCP endpoint you name, right now, and get back a verdict (open / refused / unreachable / initialize-transport-error), the shape of any refusal body, whether the server is stateful (sets Mcp-Session-Id), how many tools tools/list returns, and the guard clauses that follow. Use it before wiring an MCP server into your own config. Pass `urls` (up to 5) to check a whole mcp.json in one call. When the endpoint refuses, it also reports whether the refusal advertises a credential path (an RFC 9728 resource_metadata pointer) and whether that pointer resolves to a metadata document naming an authorization server, so you learn where a token would come from without writing that parsing yourself. No credential is sent, none is obtained, and none of their tools is ever called.

Parametersurlurls

prepay_check

Check an x402 route BEFORE you pay it. GET /v1/prepay?url=<the route> makes ONE unpaid GET with no payment header and no credential, and returns one row: the measured HTTP status, the parsed x402 v2 challenge (scheme / network / asset / amount / payTo), whether that challenge is schema-valid exact-on-Base, and whether its payTo and price agree with the seller's own card (pass `card` to read that card with one more unpaid GET). No payment is made, no credential is sent, no redirect is followed, and a transport failure on our side is reported as unknown rather than as a fact about the seller. Use it to gate a payment decision on measured terms instead of on a seller's prose.

Parametersurlrequiredcard

Version history

2
  1. v2026.10.22LatestOct 22, 2026
  2. v2026.10.13Oct 14, 2026

Score

72% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts

    Publish an icon in the registry entry.

  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.