{"apiVersion":"v1","directorySlug":"night-protocol-mcp-3bbe6dbeb0","title":"NIGHT PROTOCOL","description":null,"pageUrl":"https://www.mcpbundles.com/skills/night-protocol-mcp-3bbe6dbeb0","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.night-protocol.com/mcp","hostedMcpUrl":null,"toolCount":14,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.night-protocol/night-protocol-mcp-3bbe6dbeb0","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"np.handshake","description":"Return the Night Protocol MCP server's public banner: identity, protocol versions, tool catalog, declared invariants, and policy posture. Zero auth required.","inputSchema":{"type":"object","properties":{}},"logicalName":"np.handshake","displayName":"np.handshake","title":"np.handshake","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.capability_introspect","description":"Decode and verify a Night Protocol capability token, returning its scopes, rate limits, and remaining TTL. Agents may always introspect their own token.","inputSchema":{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}},"logicalName":"np.capability_introspect","displayName":"np.capability_introspect","title":"np.capability_introspect","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.looking_now","description":"Ask whether anyone is 'looking right now' across the Night Protocol community surface. Accepts a short natural-language intent_hint and/or a community key (tbl, mcm, fem, hot). Returns an anonymized count of live pitches bucketed by topic tag, subject to a k-anonymity floor so small buckets are suppressed. No PII is ever returned. Unauthenticated; rate-limited.","inputSchema":{"type":"object","properties":{"community":{"enum":["tbl","mcm","fem","hot"],"type":"string"},"intent_hint":{"type":"string","maxLength":280}}},"logicalName":"np.looking_now","displayName":"np.looking_now","title":"np.looking_now","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.cache_near","description":"List caches near a lat/lng. Pins are jittered until claimed. No names. Unauthenticated list is jittered with no content; a member bearer reveals claimed stash.","inputSchema":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"community":{"enum":["tbl","mcm","fem","hot","frk"],"type":"string"}}},"logicalName":"np.cache_near","displayName":"np.cache_near","title":"np.cache_near","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.cache_drop","description":"Mark a cache at GPS. Owner is auto-claimed. Requires a member bearer token.","inputSchema":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"community":{"enum":["tbl","mcm","fem","hot","frk"],"type":"string"},"contentId":{"type":"string"}}},"logicalName":"np.cache_drop","displayName":"np.cache_drop","title":"np.cache_drop","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.cache_claim","description":"Claim a cache within ~450m. Requires a member bearer token and a GPS fix.","inputSchema":{"type":"object","required":["cache_id","lat","lng"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"cache_id":{"type":"string"},"community":{"type":"string"}}},"logicalName":"np.cache_claim","displayName":"np.cache_claim","title":"np.cache_claim","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.introduce_request","description":"Pitch-and-catch entry point. In 'pitch' mode, publishes an opaque BLAKE3 commitment bound to a (community, topic_tags, coarse_region, time_bucket) routing tuple and returns a pitch_id + rendezvous_token. In 'respond' mode, records a candidate commitment against an existing rendezvous_token. In 'accept' mode, the pitcher selects one responder and starts the j2j channel clock. In 'decline' mode, the pitcher drops a specific responder. Required scopes: 'introduce:pitch', 'introduce:respond', 'rende","inputSchema":{"type":"object","required":["mode"],"properties":{"mode":{"enum":["pitch","respond","accept","decline"],"type":"string"},"commitment":{"type":"object"},"capability_token":{"type":"string"},"rendezvous_token":{"type":"string"},"candidate_commitment":{"type":"object"},"responder_fingerprint":{"type":"string"}}},"logicalName":"np.introduce_request","displayName":"np.introduce_request","title":"np.introduce_request","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.profile_read","description":"Read the calling user's own profile (handle, city, structured social handles, communities, etc.). Requires scope 'profile:read' — only a user-bound token from Settings → Agent access carries it. The subject is the token's fingerprint, so an agent can only read its own.","inputSchema":{"type":"object","properties":{"capability_token":{"type":"string"}}},"logicalName":"np.profile_read","displayName":"np.profile_read","title":"np.profile_read","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.profile_write","description":"Edit the calling user's own profile with the SAME fields and validation as the in-app editor — never server-managed fields. Requires scope 'profile:write' (user-bound token only). The subject is the token's fingerprint, so an agent can only ever write its own profile.","inputSchema":{"type":"object","properties":{"city":{"type":"string"},"locale":{"type":"string"},"x_handle":{"type":"string"},"archetype":{"type":"string"},"ageVerified":{"type":"boolean"},"communities":{"type":"array","items":{"type":"string"}},"homeCommunity":{"type":"string"},"telegram_handle":{"type":"string"},"capability_token":{"type":"string"},"onboardingComplete":{"type":"boolean"},"preferred_username":{"type":"string"}}},"logicalName":"np.profile_write","displayName":"np.profile_write","title":"np.profile_write","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.rendezvous_poll","description":"Poll the status of a rendezvous by token. Returns pending|matched|accepted|declined|expired, the responder count, and — to the verified pitcher only — the list of responder fingerprints. Requires capability scope 'rendezvous:poll'.","inputSchema":{"type":"object","required":["rendezvous_token"],"properties":{"capability_token":{"type":"string"},"rendezvous_token":{"type":"string"}}},"logicalName":"np.rendezvous_poll","displayName":"np.rendezvous_poll","title":"np.rendezvous_poll","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.classifier","description":"Deterministic natural-language → sitemap-action dispatcher over Night Protocol's 50-action corpus. Normalizes the utterance, extracts [city] / [name] slots, scores against the per-community phrase bank (TBL, MCM; fem/hot return 'unclear' until first-class actions exist), and returns a confidence-banded result (confident / ambiguous / unclear) with a dispatch descriptor (mcp_tool / rest_endpoint / stub). Pure, sub-millisecond, zero inference — safe for keystroke-level invocation. Unauthenticated;","inputSchema":{"type":"object","required":["utterance","community"],"properties":{"community":{"enum":["tbl","mcm","fem","hot"],"type":"string"},"utterance":{"type":"string","maxLength":500,"minLength":1},"thread_kind":{"enum":["dm","connection_request_pending","prediction_open","event_invite","general"],"type":"string"}}},"logicalName":"np.classifier","displayName":"np.classifier","title":"np.classifier","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.triage","description":"Joan triage bridge. Runs np.classifier first; if the classifier returns confident or ambiguous, surfaces a {kind: 'action', classification} result for the caller to dispatch. If the classifier is unclear, falls back to the Ollama-backed intent parser and returns a {kind: 'intent', intent, classification} with a ParsedIntent suitable for feeding np.looking_now. If the parser is unreachable or fails, returns a {kind: 'unclear'} with the reason. Deterministic on the hot path; LLM cost only for free","inputSchema":{"type":"object","required":["utterance","community"],"properties":{"community":{"enum":["tbl","mcm","fem","hot"],"type":"string"},"utterance":{"type":"string","maxLength":500,"minLength":1},"thread_kind":{"enum":["dm","connection_request_pending","prediction_open","event_invite","general"],"type":"string"}}},"logicalName":"np.triage","displayName":"np.triage","title":"np.triage","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.help","description":"Structured help corpus for Night Protocol. Closed-vocab topics: getting-started, signup, communities, mcp-setup-claude, mcp-setup-chatgpt, mcp-setup-curl, auth, rate-limits, spec. Returns markdown body + suggested related topics + the full topic list. Designed to give an agent (Claude, ChatGPT, custom client) a deterministic ground-truth answer when its user asks 'how do I sign up' / 'how do I add this to my agent' / 'what are the communities'. Unauthenticated; rate-limited. Default (no topic) r","inputSchema":{"type":"object","properties":{"topic":{"type":"string"},"format":{"enum":["markdown","plain"],"type":"string"}}},"logicalName":"np.help","displayName":"np.help","title":"np.help","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"np.j2j_channel","description":"Joan-to-Joan opaque byte relay. Once a rendezvous has been accepted, the pitcher and accepted responder share a symmetric channel for CHANNEL_TTL_S seconds. In 'send' mode, post an opaque E2E-encrypted ciphertext frame (base64url). In 'recv' mode, drain every frame you have not yet seen (cursor-based, returns empty when caught up). In 'close' mode, tear the channel down early (idempotent). The server never parses or logs ciphertext. Requires scope 'j2j:connect'.","inputSchema":{"type":"object","required":["mode","rendezvous_token"],"properties":{"mode":{"enum":["send","recv","close"],"type":"string"},"since_seq":{"type":"integer","minimum":0},"ciphertext_b64":{"type":"string"},"capability_token":{"type":"string"},"rendezvous_token":{"type":"string"}}},"logicalName":"np.j2j_channel","displayName":"np.j2j_channel","title":"np.j2j_channel","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=NIGHT-PROTOCOL&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AubmlnaHQtcHJvdG9jb2wuY29tL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22NIGHT-PROTOCOL%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.night-protocol.com%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22NIGHT-PROTOCOL%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.night-protocol.com%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=NIGHT+PROTOCOL&connectorUrl=https%3A%2F%2Fmcp.night-protocol.com%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"NIGHT-PROTOCOL\" --url \"https://mcp.night-protocol.com/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/night-protocol-mcp-3bbe6dbeb0","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/night-protocol-mcp-3bbe6dbeb0/tools/{tool}","mcpServerUrl":"https://mcp.night-protocol.com/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/night-protocol-mcp-3bbe6dbeb0?live=1"}