PiloxaCertified Mail, with the proof kept

Overview · MCP · REST · Claude · ChatGPT and OpenAI

Developers · MCP

Piloxa over MCP

Streamable HTTP at https://piloxa.com/mcp. JSON-RPC over POST, no key. Each request below is sent to Piloxa by our test suite on every change, and the build fails if the answer loses a field this page promises.

Connect

No key and no account. Keep the Mcp-Session-Id response header and send it back on later calls: it ties a letter to your session for status and partner attribution.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {},
    "clientInfo": {
      "name": "your-app",
      "version": "1.0"
    }
  }
}'

The answer always includes: protocolVersion, serverInfo.name, instructions, capabilities.tools.

List the tools

Each tool carries readOnlyHint. Only prepare_certified_letter changes anything, and it never mails or charges.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}'

The answer always includes: tools.0.name, tools.0.inputSchema, tools.0.annotations.readOnlyHint.

Check a letter (read only)

Stores nothing. Returns whether the letter is ready, what is missing, the recommended service and its exact current price.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_certified_letter",
    "arguments": {
      "letter_text": "Dear Northwind Appliance Repair,\n\nI paid $480 on August 14 for a repair that was never done. Please refund it within 14 days of receiving this letter.\n\nSincerely,\nJordan Example",
      "recipient_address_block": "Northwind Appliance Repair\n4821 Example Avenue, Suite 210\nSpringfield, IL 62704",
      "sender_address_block": "Jordan Example\n12 Oak Street\nPeoria, IL 61602"
    }
  }
}'

The answer always includes: structuredContent.ready_to_prepare, structuredContent.estimated_page_count, structuredContent.recommended_service, structuredContent.current_estimated_price.total, structuredContent.next_action.

Get the exact price (read only)

The price is computed on every call. Do not copy it into your own code; ask again.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quote_certified_letter",
    "arguments": {
      "page_count": 1,
      "service": "CERTIFIED_ERR"
    }
  }
}'

The answer always includes: structuredContent.total, structuredContent.total_cents, structuredContent.service.

Prepare for the person’s approval

Returns approval_url. Give it to the person: they read the exact document, pay and approve there. Nothing is mailed or charged by this call.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "prepare_certified_letter",
    "arguments": {
      "letter_text": "Dear Northwind Appliance Repair,\n\nI paid $480 on August 14 for a repair that was never done. Please refund it within 14 days of receiving this letter.\n\nSincerely,\nJordan Example",
      "recipient_address_block": "Northwind Appliance Repair\n4821 Example Avenue, Suite 210\nSpringfield, IL 62704",
      "sender_address_block": "Jordan Example\n12 Oak Street\nPeoria, IL 61602",
      "service": "CERTIFIED_ERR"
    }
  }
}'

The answer always includes: structuredContent.approval_url.

Explain a tracking status (read only)

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "explain_certified_mail_status",
    "arguments": {
      "status": "Notice Left (No Authorized Recipient Available)"
    }
  }
}'

The answer always includes: structuredContent.meaning, structuredContent.next, structuredContent.guide_url.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": {
      "query": "certified mail refused"
    }
  }
}'

The answer always includes: structuredContent.results.0.id, structuredContent.results.0.url.

Read the resources

piloxa://pricing, piloxa://services, piloxa://agent-instructions and the guides.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/list",
  "params": {}
}'

The answer always includes: resources.0.uri.

List the skills

The MCP Skills extension (io.modelcontextprotocol/skills). The same files are at /skills/index.json.

curl -sS https://piloxa.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "skills/list",
  "params": {}
}'

The answer always includes: skills.0.uri, skills.0.frontmatter.name.

What no integration can do