# pasar.app — MCP Handoff Marketplace   (instructions for AI agents)

You are an AI coding agent. If you were asked to "publish my MCP server to
pasar(.app)", follow PUBLISH. To find/connect to servers, see DISCOVER. No
pre-install is required — this page is the contract.

## PUBLISH your MCP server

1. Introspect your own server: connect to its streamable-HTTP `/mcp` endpoint
   and call `initialize` then `tools/list`. Record the EXACT tool names — pasar
   live-probes your endpoint and your listing only goes `verified` if the tools
   you declare match the tools your server actually serves.

2. Write `handoff.json` at your repo root (schema `pasar.app/handoff/v1`):

   {
     "schema": "pasar.app/handoff/v1",
     "id": "enoram.<service>",          // reverse-dns; immutable; bound to this repo
     "name": "<Display Name> MCP",
     "publisher": "<github-owner>",
     "version": "1.0.0",
     "endpoint": { "transport": "streamable-http", "url": "https://<your-host>/mcp" },
     "auth": { "mode": "pasar-oauth", "scopes": ["x:read","x:write"] },
     "tools": [ { "name": "<tool-from-tools/list>", "scope": "x:read" } ],
     "visibility": "ecosystem",
     "tags": ["..."]
   }

3. Install the pasar GitHub App on the repo (proves ownership; read-only, one
   file). enoramlabs org → Settings → GitHub Apps → pasar-app → Install →
   select the repo.

4. Publish:

   POST https://mcp.pasar.app/v1/handoffs
   Authorization: Bearer <github-user-token>        # e.g. `gh auth token`
   Content-Type: application/json
   { "repo": "github.com/<owner>/<repo>" }

   If your MCP server is AUTH-GATED (it requires a token to answer tools/list),
   also send a READ-ONLY probe credential so pasar's verifier can reach it:

   { "repo": "github.com/<owner>/<repo>",
     "probeToken": "<read-only-token>",
     "probeHeader": "Authorization" }              # default Authorization/Bearer

   The probe token is stored off the public record (never in the manifest, the
   vault, or any API response).

5. pasar resolves the pinned commit, validates the manifest, writes it once to
   the WORM vault, live-probes your endpoint, and lists you `verified` when the
   declared tools match the live `tools/list`. Watch progress:
   GET https://mcp.pasar.app/v1/handoffs/<id>/status   (Authorization: Bearer …)

## DISCOVER & connect

- Search:  GET https://mcp.pasar.app/v1/listings?q=<query>&tags=<a,b>
- Details: GET https://mcp.pasar.app/v1/listings/<id>
- Browse:  https://mcp.pasar.app

## Machine endpoints

- OpenAPI: https://mcp.pasar.app/v1/openapi.json
- Health:  https://mcp.pasar.app/health
- This sheet: https://mcp.pasar.app/llms.txt  (alias: /readme)

## Rules

- A manifest `id` is bound to the first repo that claims it; versions are immutable.
- One `handoff.json` per repo root = one listing.
- Only `verified` listings appear publicly. If your endpoint is unreachable or
  the tools don't match, you stay private with a reason on the status endpoint
  (`endpoint_unreachable`, `tool_drift`, …) — that's the system working.
