Koskamo

Nagora MCP

An MCP server for the Nagora peer-to-peer marketplace that enables autonomous agents to search listings, purchase physical or digital goods using Nano (XNO), track orders, and verify cryptographically signed receipts via escrow.

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.

Nagora MCP logo, by NagoraVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Nagora
MCP endpoint (Streamable HTTP)
https://api.nagora.shop/mcp
Vendor documentation

What its tools do

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

9 of 9 have a description · 5 of 9 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 ·
  • Passed Official MCP Registry namespace is tied to nagora.shop ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search real inventory for physical or digital items
  • Purchase items using Nano cryptocurrency with escrow protection
  • Track order status and confirm delivery
  • Retrieve and verify cryptographically signed receipts

Source and maintenance

Vendor evidenceRegistry 1.0.1
Maintenance checked

Protocol and capabilities

Server
nagora-api 1.0.0.0
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {},
  "logging": {}
}

Tools

9 advertised

search_listings
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full-text search over active listings on nagora.shop. No API key required. Returns an items array and total count. Use get_listing for full detail before purchasing.

search_listings input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Free-text search query, e.g. 'mechanical keyboard'"
    },
    "count": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Page size 1-100, default 20"
    },
    "sortBy": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Sort order: newest, price_asc, or price_desc. Default newest"
    },
    "maxPrice": {
      "type": [
        "number",
        "null"
      ],
      "default": null,
      "description": "Maximum price filter"
    },
    "minPrice": {
      "type": [
        "number",
        "null"
      ],
      "default": null,
      "description": "Minimum price filter"
    },
    "categoryId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Numeric category filter"
    },
    "startIndex": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Pagination offset, default 0"
    }
  }
}
search_listings annotations
{
  "readOnlyHint": true
}
register_agent
Advertised by the server during the last successful anonymous check.

Creates a Nagora agent and mints its API key in one call. No Nagora account or signup required. IMPORTANT: this is a remote server with no local storage, so the key is returned ONCE in the result. Store it securely and pass it as the apiKey argument on subsequent calls in this session; for long-lived setups reconnect with an 'Authorization: Bearer <key>' header instead. Skip this tool if a credential is already configured; check with whoami.

register_agent input schema
{
  "type": "object",
  "required": [
    "name",
    "nanoAddress"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Agent name, e.g. 'claude-shopper' (max 64 chars)"
    },
    "callbackUrl": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional webhook URL; Nagora POSTs signed order state-change events to it"
    },
    "homepageUrl": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional homepage describing the agent"
    },
    "nanoAddress": {
      "type": "string",
      "description": "Nano (XNO) address refunds should be sent to: the wallet this agent pays from"
    },
    "contactEmail": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Optional contact email for order issues"
    }
  }
}
confirm_delivery
Advertised by the server during the last successful anonymous check.

Confirms the goods or digital content arrived and releases the escrowed funds to the seller. Requires the order's escrowStatus to be Shipped. Call promptly once delivery is verified: the seller is waiting on this to get paid. If never called, an auto-finalise timer releases funds after the configured window.

confirm_delivery input schema
{
  "type": "object",
  "required": [
    "orderId"
  ],
  "properties": {
    "apiKey": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Agent API key (nag_agt_...). Omit when connected with an Authorization header"
    },
    "orderId": {
      "type": "string",
      "format": "uuid",
      "description": "Order ID to confirm"
    }
  }
}
get_order
Advertised by the server during the last successful anonymous check.
Advertised read-only

Polls an order placed by this agent. Returns orderStatus, escrowStatus, funding timestamps, tracking info, and the receipt ID once available. Poll after funding the deposit address, and after the seller ships, before calling confirm_delivery. For digital listings, digitalContent holds what was bought once the order is paid.

get_order input schema
{
  "type": "object",
  "required": [
    "orderId"
  ],
  "properties": {
    "apiKey": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Agent API key (nag_agt_...). Omit when connected with an Authorization header"
    },
    "orderId": {
      "type": "string",
      "format": "uuid",
      "description": "Order ID returned by create_purchase"
    }
  }
}
get_order annotations
{
  "readOnlyHint": true
}
whoami
Advertised by the server during the last successful anonymous check.
Advertised read-only

Verifies the configured credential and returns the agent's identity, spending caps, callback URL, and webhook secret. Call this first to confirm the credential works.

whoami input schema
{
  "type": "object",
  "properties": {
    "apiKey": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Agent API key (nag_agt_...). Omit when connected with an Authorization header"
    }
  }
}
whoami annotations
{
  "readOnlyHint": true
}
get_receipt
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns the cryptographically signed receipt for a completed order, including the seller's Nano address, the on-chain payout block hash, and Nagora's KMS signature. Available only after escrow is Released; returns an error while the order is still in progress.

get_receipt input schema
{
  "type": "object",
  "required": [
    "orderId"
  ],
  "properties": {
    "apiKey": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Agent API key (nag_agt_...). Omit when connected with an Authorization header"
    },
    "orderId": {
      "type": "string",
      "format": "uuid",
      "description": "Order ID to fetch the receipt for"
    }
  }
}
get_receipt annotations
{
  "readOnlyHint": true
}
create_purchase
Advertised by the server during the last successful anonymous check.

Places an order against a listing. Returns a depositAddress (per-order escrow Nano account) and amountNano. IMPORTANT: the order is not funded by this call. Send exactly amountNano to depositAddress from the agent's Nano wallet to fund escrow. Once funds are detected the order moves to AwaitingShipment automatically. Physical listings require a shippingAddress.

create_purchase input schema
{
  "type": "object",
  "required": [
    "listingId"
  ],
  "properties": {
    "apiKey": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Agent API key (nag_agt_...). Omit when connected with an Authorization header"
    },
    "quantity": {
      "type": "integer",
      "default": 1,
      "description": "Quantity, default 1"
    },
    "listingId": {
      "type": "string",
      "format": "uuid",
      "description": "Listing to purchase"
    },
    "variantId": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "default": null,
      "description": "Variant ID from get_listing, when the listing has variants"
    },
    "quotedTotalNano": {
      "type": [
        "number",
        "null"
      ],
      "default": null,
      "description": "Total in XNO from a recent get_listing call. Rejected if more than 2% off the live rate; omit to skip the guard"
    },
    "shippingAddress": {
      "type": [
        "object",
        "null"
      ],
      "default": null,
      "required": [
        "fullName",
        "line1",
        "line2",
        "city",
        "state",
        "postalCode",
        "countryCode",
        "phone"
      ],
      "properties": {
        "city": {
          "type": [
            "string",
            "null"
          ]
        },
        "line1": {
          "type": [
            "string",
            "null"
          ]
        },
        "line2": {
          "type": [
            "string",
            "null"
          ]
        },
        "phone": {
          "type": [
            "string",
            "null"
          ]
        },
        "state": {
          "type": [
            "string",
            "null"
          ]
        },
        "fullName": {
          "type": [
            "string",
            "null"
          ]
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ]
        },
        "countryCode": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "Required for physical delivery; omit for digital listings"
    },
    "deliveryOptionId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Delivery option ID from get_listing, when the listing offers several"
    }
  }
}
get_listing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Fetch a single listing by ID. No API key required. Returns full detail including variants, delivery options, and pricing. Use the returned Nano total as quotedTotalNano when purchasing to guard against exchange-rate drift.

get_listing input schema
{
  "type": "object",
  "required": [
    "listingId"
  ],
  "properties": {
    "listingId": {
      "type": "string",
      "format": "uuid",
      "description": "Listing ID from search_listings"
    }
  }
}
get_listing annotations
{
  "readOnlyHint": true
}
cancel_order
Advertised by the server during the last successful anonymous check.

Cancels an order whose escrow is still Initiated (no on-chain funds sent yet). Restores listing stock. Cannot cancel once escrow is Funded; use the dispute or refund flow on the website instead.

cancel_order input schema
{
  "type": "object",
  "required": [
    "orderId"
  ],
  "properties": {
    "apiKey": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Agent API key (nag_agt_...). Omit when connected with an Authorization header"
    },
    "orderId": {
      "type": "string",
      "format": "uuid",
      "description": "Order ID to cancel"
    }
  }
}

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

Maintenance history

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

  • · probe · passed · 450 ms · metadata changed · 9 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 nagora-mcp https://api.nagora.shop/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 nagora-mcp --url https://api.nagora.shop/mcp

Cursor

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

Cline

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

VS Code

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

Let your agent find its tools

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

Do you run Nagora MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing