{"serverId":"mcp-registry/io.github.ptrinh/freeport-nostr","tools":[{"name":"freeport_create_post","fixed":{"name":"freeport_create_post","description":"Publish a Freeport intent — an OFFER (side \"offer\": driver/provider/seller) or a REQUEST (side \"request\": rider/buyer). Provide EITHER a `secretKey` (nsec or hex — the server builds, signs and publishes; use a DEDICATED agent key, never a personal one — it is used once and never stored) OR a pre-signed `event` (you sign locally; nothing secret reaches the server). Strict rate limits apply. Returns the published event id + addressable `d`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"d":{"type":"string","description":"Stable id to republish/replace an existing post; defaults to random."},"side":{"enum":["offer","request"],"type":"string","description":"offer = provider/seller/driver; request = buyer/rider."},"event":{"description":"A complete, signed Nostr event (kind 32101/32102). Use instead of secretKey to keep keys off the server.","type":"string"},"title":{"type":"string","maxLength":200},"market":{"type":"string","description":"Market key, e.g. \"rideshare\" or \"service\"."},"relays":{"type":"array","items":{"type":"string"},"maxItems":10},"schema":{"type":"string","description":"Payload schema, e.g. \"rideshare/1\" or \"service/1\"."},"topics":{"type":"array","items":{"type":"string"},"maxItems":8,"description":"Topic `t` tags (area/category), e.g. [\"vn_hanoi\",\"vn_hanoi_ridesharing\"]."},"window":{"type":"object","required":["start","end"],"properties":{"end":{"type":"integer"},"start":{"type":"integer"}},"additionalProperties":false},"payload":{"type":"object","description":"Intent payload (from/to/location, payment, etc.) per the freeport://protocol resource.","additionalProperties":{}},"geohashes":{"type":"array","items":{"type":"string"},"maxItems":8,"description":"Geohashes for location-scoped discovery. Each is expanded into all its prefixes (precision 1-6) so radius searches at any precision match."},"secretKey":{"type":"string","description":"nsec or 64-hex private key. Used transiently to sign; never stored. Omit if passing a pre-signed `event`."},"expiresInMinutes":{"type":"integer","maximum":43200,"minimum":5,"description":"How long the post stays live (default 720). Max 30 days."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: event. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":628,"tokensAfter":632},{"name":"nostr_get_event","fixed":{"name":"nostr_get_event","description":"Fetch one or more events by id. Returns the raw signed events.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":50,"minItems":1},"relays":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Override the relay set for this call (ws/wss URLs, max 10). Defaults to the server relays."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"nostr_query_raw","fixed":{"name":"nostr_query_raw","description":"Escape hatch: run an arbitrary NIP-01 filter (kinds/authors/ids/tags/since/until/limit). Use the typed tools above when they fit. Returns raw signed events.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"ids":{"type":"array","items":{"type":"string"}},"tags":{"type":"object","description":"Tag filters, e.g. {\"t\":[\"vn_hanoi\"],\"g\":[\"w3gv\"]}. Keys are single tag letters.","additionalProperties":{"type":"array","items":{"type":"string"}}},"kinds":{"type":"array","items":{"type":"integer"}},"limit":{"type":"integer","default":100,"maximum":500,"minimum":1},"since":{"type":"integer"},"until":{"type":"integer"},"relays":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Override the relay set for this call (ws/wss URLs, max 10). Defaults to the server relays."},"authors":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":270,"tokensAfter":270},{"name":"nostr_search_intents","fixed":{"name":"nostr_search_intents","description":"Search Freeport ride/service/product intents (offers & requests). Filter by side, category/area topic tags, and an optional geographic radius. Results are decoded, expiry-filtered, and sorted nearest-first when a point is given.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"near":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number"},"lon":{"type":"number"},"radiusKm":{"type":"number","default":100,"maximum":20000,"exclusiveMinimum":0}},"description":"Filter & sort by distance from this point.","additionalProperties":false},"side":{"enum":["offer","request","any"],"type":"string","default":"any","description":"offer = drivers/providers/sellers; request = riders/buyers; any = both"},"limit":{"type":"integer","default":200,"maximum":500,"minimum":1},"since":{"type":"integer","description":"Only events created at/after this unix-seconds time."},"until":{"type":"integer","description":"Only events created at/before this unix-seconds time."},"relays":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Override the relay set for this call (ws/wss URLs, max 10). Defaults to the server relays."},"topics":{"type":"array","items":{"type":"string"},"description":"Topic `t` tags to require (category/subcategory/area keys, e.g. \"vn_hanoi\", \"ridesharing\")."},"includeExpired":{"type":"boolean","default":false},"relaySideGeohash":{"type":"boolean","default":false,"description":"Also narrow at the relay via a #g cover of the radius. Only effective if posts carry geohash-prefix tags; off by default."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":469,"tokensAfter":469},{"name":"nostr_search_reputation","fixed":{"name":"nostr_search_reputation","description":"Fetch reputation signals for a pubkey: karma ratings (kind 32103) it received and deal receipts (kind 32104). Returns proven-deal count (both receipt halves present) and a karma summary. Note: scores are subjective and un-weighted here; do not treat as Sybil-proof.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["pubkey"],"properties":{"limit":{"type":"integer","default":500,"maximum":1000,"minimum":1},"pubkey":{"type":"string","description":"Subject pubkey (hex) to look up reputation for."},"relays":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Override the relay set for this call (ws/wss URLs, max 10). Defaults to the server relays."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222}],"toolsChanged":5,"tokensSaved":0,"todo":[{"tool":"freeport_create_post","params":["title","relays","window"]},{"tool":"nostr_get_event","params":["ids"]},{"tool":"nostr_query_raw","params":["ids","kinds","limit","since","until","authors"]},{"tool":"nostr_search_intents","params":["limit","includeExpired"]},{"tool":"nostr_search_reputation","params":["limit"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}