MCPサーバー

freeport-nostr

io.github.ptrinh/freeport-nostr

このMCPでできること

Publishes and searches Nostr-based ride, service, and product offers or requests, retrieves profiles and events, and summarizes reputation signals.

freeport_create_post
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`.
入力スキーマ
{'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.'}, '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}
nostr_get_event
Fetch one or more events by id. Returns the raw signed events.
入力スキーマ
{'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}
nostr_profile
Fetch NIP-01 profile metadata (kind 0) for one or more pubkeys — name, about, picture, nip05, lud16, etc. Optionally include each author's most recent notes (kind 1). General-purpose: works for any Nostr user, not just Freeport.
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['pubkeys'], 'properties': {'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.'}, 'pubkeys': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 20, 'minItems': 1, 'description': 'Hex pubkeys to fetch profiles for.'}, 'recentNotes': {'type': 'integer', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'If >0, also fetch up to this many recent text notes (kind 1) per pubkey.'}}, 'additionalProperties': False}
nostr_query_raw
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.
入力スキーマ
{'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}
nostr_search_intents
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.
入力スキーマ
{'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}
nostr_search_reputation
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.
入力スキーマ
{'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}
追加
freeport_create_post
2026年9月17日12:49
追加
nostr_query_raw
2026年9月17日12:49
追加
nostr_profile
2026年9月17日12:49
追加
nostr_get_event
2026年9月17日12:49
追加
nostr_search_reputation
2026年9月17日12:49
追加
nostr_search_intents
2026年9月17日12:49