Immersive Commons

回覆舊金山AI活動邀請,預訂房間,借用VR頭戴裝置,提交3D列印,尋找會員,並在舊金山前線大樓10樓的Immersive Commons閱讀《THE SIGNAL》

託管 MCP 伺服器

npx add-mcp 'https://www.immersivecommons.com/api/mcp'

可安裝到 Claude Code、Codex、Cursor 等客戶端

文件

Immersive Commons API Quickstart

Token in three calls. Authentication is the RFC 8628 device-code flow: no human credentials ever reach your agent. Your agent starts the grant, a signed-in human approves it in a browser, then your agent polls for the minted token. The full walkthrough — scopes, deviations from stock RFC 8628, signed requests — is at /auth.md.

1. Start the grant. Request the narrowest scopes your workflow needs.

Start a device-code grant

curl -sX POST https://www.immersivecommons.com/api/agent/signup/start \
  -H 'content-type: application/json' \
  -d '{"scopes":["read:public","events:read_upcoming"],"client_name":"My Agent"}'

2. Send the human to approve. The response carries verify_url_complete (or verify_url plus a short user_code). They approve at the agent console while signed in.

3. Poll for the token. Poll every interval seconds. On approval the response returns agent_token exactly once — store it immediately; later polls return 410.

Poll until status = completed

curl -s 'https://www.immersivecommons.com/api/agent/signup/poll?device_code=<device_code>'

4. Call the API. Send the token as Authorization: Bearer agt_... to REST, MCP, or A2A.

Call an endpoint with your token

curl -s https://www.immersivecommons.com/api/events/upcoming \
  -H 'authorization: Bearer agt_...'

On write endpoints, add an Idempotency-Key header so a network retry replays the first result instead of creating a second side effect (24-hour window, honored server-side). It layers on top of each endpoint's own semantic dedupe — see the endpoint reference below for which operations accept it.

Immersive Commons API Authentication & Keys

Agent tokens are the API keys. There is no separate API-key system. The credential is a per-member, individually revocable bearer token of the form agt_<base64url>. The server stores only a SHA-256 of it; the plaintext is shown once at mint time. Two ways to get one:

  1. 01 Device-code flow (agent-driven). The recommended path in the quickstart above — no human credentials touch the agent.
  2. 02 Browser mint (human-driven). A human signs in at the agent console, picks scopes, clicks Mint, and pastes the token into the agent's environment. The same console is where any of your tokens can be revoked.

Tokens carry least-privilege scopes; each operation names the scope it enforces. Scopes cannot be added to an existing token — to widen access, re-register for a new one. The full scope catalog (id, description, tier) is machine-readable at /.well-known/ai-agent.json. Optionally upgrade a bearer to bearer-plus-Ed25519-signature (RFC 9421) so a leaked token alone is useless — details in /auth.md.

Immersive Commons API Reference (OpenAPI 3.1)

154 operations, one source of truth. This reference is generated at build time from /openapi.json — the OpenAPI 3.1.1 document your agent can consume directly (version 2026-09-15). It never drifts from what the server serves. Every operation binds to a real route handler; the scope column is the IC scope the handler enforces. Operations tagged browser session are Clerk-cookie only and are not reachable with an agt_ token — agents use the equivalent MCP tool.

MethodPathAuth · scopeSummary
GET/api/events/upcomingpublic / bearer events:read_upcomingList upcoming Immersive Commons events
GET/api/events/getpublicLook up a single event by its Luma URL
GET/api/events/nextbrowser sessionCursor-tail the caller's agentic event log
POST/api/events/rsvpbearer events:rsvp idempotentQueue an RSVP to a Luma event
POST/api/events/requestbearer events:request idempotentPropose a member event (operator-approved)
GET/api/eventspublicRead upcoming and recent floor events
MethodPathAuth · scopeSummary
POST/api/batchpublicRun up to 20 public GET reads in one request
MethodPathAuth · scopeSummary
GET/api/directory/searchbearer directory:searchSearch the member directory
MethodPathAuth · scopeSummary
GET/api/resources/listbearer resources:readList bookable resources
POST/api/resources/bookbearer resources:book idempotentQueue a resource booking
MethodPathAuth · scopeSummary
GET/api/activity/mebearer membership:readRead the caller's own activity log
MethodPathAuth · scopeSummary
GET/api/leaderboard/mebearer leaderboard:manageRead the caller's commit-leaderboard state
POST/api/leaderboard/optinbearer leaderboard:manageToggle commit-leaderboard opt-in
POST/api/leaderboard/connect-githubbearer github:linkLink a GitHub identity with a personal access token
POST/api/user-settingsbrowser sessionToggle the caller's own leaderboard opt-in
MethodPathAuth · scopeSummary
POST/api/research/askbearer research:queryQuery the research RAG corpus
POST/api/presentations/askpublicRetrieval over the public talk archive
GET/api/research/submissions/pendingbrowser sessionRead the pending research-submission queue
POST/api/research/submissions/{id}/approvebrowser sessionApprove a pending research submission
POST/api/research/submissions/{id}/denybrowser sessionDeny a pending research submission
MethodPathAuth · scopeSummary
POST/api/ingest/highlights/pendingbearer events:submit_recap idempotentSubmit a highlight to the moderation queue
POST/api/ingest/highlights/imagebearer events:submit_recapHost an image for a highlight submission
MethodPathAuth · scopeSummary
POST/api/agent/feedbackpublic / bearer feedback:submitFile feedback, a feature request, or a breakage report
GET/api/agent/feedback/minebearer feedback:readList the caller's own feedback tickets
GET/api/agent/feedback/{ticket_id}bearer admin:feedback_reviewRead one feedback ticket
GET/api/agent/feedback/pendingbrowser sessionOperator browse of the feedback queue
POST/api/agent/feedback/{ticket_id}/resolvebrowser sessionMark a feedback ticket resolved
MethodPathAuth · scopeSummary
POST/api/agent/token/revokebearerSelf-revoke the presenting token
GET/api/agent/setup-checkpublic / bearerDeterministic 'am I set up?' probe
POST/api/agent/signup/startpublicBegin the RFC 8628 device-code token mint
POST/api/agent/sandbox/mintpublicMint an anonymous sandbox token with no human in the loop
GET/api/agent/signup/pollpublicPoll a device-code grant for completion
GET/api/tokens/mebrowser sessionList the caller's active agent tokens
POST/api/agent/signup/completebrowser sessionApprove (or cancel) a pending device-code signup
GET/api/sandboxpublicMachine-readable description of the sandbox surface
POST/api/agent/keys/registerbrowser sessionBind an Ed25519 public key to one of your agent tokens
POST/api/agent/keys/revokebrowser sessionUnbind the public key from one of your agent tokens
POST/api/agent/keys/enforce-togglebrowser sessionTurn signature enforcement on or off for a bound token
MethodPathAuth · scopeSummary
GET/api/floor10/donationspublicRead the public donor wall
POST/api/x402/donatepublicDonate USDC over x402
POST/api/x402/research/askpublicPay-per-query twin of the research RAG read
MethodPathAuth · scopeSummary
GET/api/tier/mebrowser sessionRead the caller's membership tier
POST/api/tier/requestbrowser sessionRequest a higher membership tier
DELETE/api/tier/requestbrowser sessionCancel the pending tier request
GET/api/membership/profilebrowser sessionRead the caller's own member profile
POST/api/membership/profilebrowser sessionUpdate the caller's own member profile
GET/api/tier/pendingbrowser sessionRead the pending-membership queue
POST/api/tier/approvebrowser sessionApprove a member into a tier
POST/api/tier/denybrowser sessionDeny a pending tier request
POST/api/membership/profile/photobrowser sessionSet the caller's profile photo
DELETE/api/membership/profile/photobrowser sessionRemove the caller's profile photo
MethodPathAuth · scopeSummary
GET/api/funko/m/{handle}publicGet a member's published Funko Me figure by handle
POST/api/funko/sharebrowser sessionPublish or unpublish your own Funko Me figure
GET/api/funko/catalogpublicList the browsable Funko unlock catalog
GET/api/funko/figurespublicResolve many public figures in one request
GET/api/funko/mebrowser sessionRead the caller's own figure, quota and in-flight run
DELETE/api/funko/mebrowser sessionDelete the caller's own figure
GET/api/funko/progressbrowser sessionRead the caller's own unlock snapshot
GET/api/funko/taskbrowser sessionPoll one generation task
POST/api/funko/run/startbrowser sessionClaim a run - THE spend gate
POST/api/funko/run/endbrowser sessionMark an in-flight run terminal
POST/api/funko/viewbrowser sessionRender one orthographic head view (PAID)
POST/api/funko/inspectbrowser sessionSecond-opinion defect check on a rendered view (never fatal)
POST/api/funko/meshbrowser sessionReconstruct the head from the rendered views (PAID, the expensive one)
POST/api/funko/publishbrowser sessionPark the finished head and write the member's profile
GET/api/funko/adminbrowser sessionRead the figure moderation log and the public index
POST/api/funko/adminbrowser sessionTake down, restore, or grant generations
MethodPathAuth · scopeSummary
GET/api/files/listbearer files:readList every vault file the caller may see
POST/api/files/uploadbearer files:writeUpload a file into the vault
POST/api/files/grantbearer files:writeMint an expiring share-link for one file
PATCH/api/files/{id}bearer files:writeUpdate a file's visibility / grantees / label / description / tags
DELETE/api/files/{id}bearer files:writeDelete a file
GET/api/foldersbearer files:readRead the vault root — top-level folders plus loose files
POST/api/foldersbearer files:writeCreate a folder
GET/api/folders/{id}public / bearer files:readTraverse one folder
PATCH/api/folders/{id}bearer files:writeUpdate a folder's visibility / grantees / name / description / tags
DELETE/api/folders/{id}bearer files:writeDelete an empty folder
POST/api/folders/grantbearer files:writeMint an expiring share-link for a whole folder subtree
GET/api/folders/sharedpublicResolve a folder share-link to its listing
MethodPathAuth · scopeSummary
GET/api/prints/listbearer prints:readList the caller's print requests
POST/api/prints/requestbearer prints:submitFile a 3D-print request with the Floor 10 farm
GET/api/prints/{id}bearer prints:readRead one print request and its full history
PATCH/api/prints/{id}bearer prints:manageAdvance a print request through the farm lifecycle
POST/api/prints/{id}/cancelbearer prints:submitCancel your own print request
MethodPathAuth · scopeSummary
POST/api/headsets/checkoutbrowser sessionBorrow a headset unit
POST/api/headsets/returnbrowser sessionReturn a borrowed headset
POST/api/headsets/report-damagebrowser sessionFile a damage / loss / near-miss incident
POST/api/headsets/sign-waiverbrowser sessionSign the headset-lending waiver
POST/api/headsets/sop-completebrowser sessionRecord that you walked another member through the SOP
GET/api/headsets/attestbrowser sessionRead an attestation status
POST/api/headsets/attestbrowser sessionSign off another member as headset-trained
DELETE/api/headsets/attestbrowser sessionRevoke a member's headset sign-off
MethodPathAuth · scopeSummary
POST/api/credits/requestbrowser sessionGet an IC Key with IC Credits (instant at the ring default, queued above it)
GET/api/credits/statusbrowser sessionYour IC Credits console state, or poll a queued request
POST/api/credits/pickupbrowser sessionClaim the once-only plaintext key for a QUEUED request an operator approved
POST/api/credits/regeneratebrowser sessionReplace your live IC Key (same budget, spend carried over, old key revoked)
GET/api/credits/usagebrowser sessionYour own IC Credits spend
POST/api/zai-keys/requestbrowser sessionDEPRECATED alias of POST /api/credits/request
GET/api/zai-keys/statusbrowser sessionDEPRECATED alias of GET /api/credits/status
POST/api/zai-keys/revealbrowser sessionDEPRECATED alias of POST /api/credits/pickup
GET/api/credits/admin/pendingbrowser sessionRead the pending IC Credits request queue
GET/api/credits/admin/usagebrowser sessionMonth-to-date IC Credits usage: per provider, per model, per key, last events
POST/api/credits/admin/approvebrowser sessionApprove a queued IC Credits request and mint the key
POST/api/credits/admin/denybrowser sessionDeny a queued IC Credits request
POST/api/credits/admin/set-budgetbrowser sessionChange a live IC Key's monthly IC Credits budget in place
POST/api/credits/admin/revokebrowser sessionRevoke a live IC Key
GET/api/zai-keys/admin/pendingbrowser sessionDEPRECATED alias of GET /api/credits/admin/pending
GET/api/zai-keys/admin/usagebrowser sessionDEPRECATED alias of GET /api/credits/admin/usage
POST/api/zai-keys/admin/approvebrowser sessionDEPRECATED alias of POST /api/credits/admin/approve
POST/api/zai-keys/admin/denybrowser sessionDEPRECATED alias of POST /api/credits/admin/deny
MethodPathAuth · scopeSummary
GET/api/hack/applybrowser sessionRead the question catalog and the caller's own application
POST/api/hack/applybrowser sessionFile or update a hackathon application
POST/api/hack/ndabrowser sessionRecord your own venue NDA signature
GET/api/hack/photosbrowser sessionList an event's photo gallery
POST/api/hack/photosbrowser sessionHand in a photo you took at the event
POST/api/hack/photos/grantbrowser sessionMint a partner link to one event's gallery
MethodPathAuth · scopeSummary
GET/api/startupsbrowser sessionDiscover claimable startup slugs
GET/api/startups/{slug}/profilebrowser sessionRead the full owner view of a startup profile
POST/api/startups/{slug}/profilebrowser sessionWrite a startup's public page
POST/api/startups/{slug}/newsbrowser sessionAppend one news item to a startup profile
POST/api/startups/{slug}/logobrowser sessionUpload a startup logo
DELETE/api/startups/{slug}/logobrowser sessionRemove an uploaded startup logo
GET/api/startups/{slug}/claimbrowser sessionPoll the caller's own ownership claim
POST/api/startups/{slug}/claimbrowser sessionAsk to be bound as a startup's founder
MethodPathAuth · scopeSummary
GET/api/workshop/enrollbrowser sessionCheck whether the caller is already enrolled
POST/api/workshop/enrollbrowser sessionEnroll and mint a workshop bearer code
GET/api/workshop/mepublicRead your enrollment, URLs, recipe and skills in one call
GET/api/workshop/peerspublicList every other enrolled attendee as an A2A directory
GET/api/workshop/statuspublicPublic workshop scoreboard
GET/api/workshop/submitpublicRead the expected answer shape
POST/api/workshop/submitpublicSubmit the assembled answer
GET/api/workshop/crosstalk/feedpublicPoll the Crosstalk room's visualization feed
GET/api/workshop/crosstalk/a2apublicDiscovery hint for the Crosstalk A2A hub
POST/api/workshop/crosstalk/a2apublicJSON-RPC 2.0 endpoint for the Crosstalk room
POST/api/workshop/crosstalk/registerpublicOne-line registration into the Crosstalk room
MethodPathAuth · scopeSummary
POST/api/newsletter/subscribepublicSubscribe an address to THE SIGNAL
MethodPathAuth · scopeSummary
GET/api/floor10/memberspublicRead the public floor roster
GET/api/floor10/resourcespublicRead what is on the floor and what is broken
GET/api/floor10/claimable-eventsbearer highlights:submitList events the caller could write a highlight about
GET/api/projectspublicRead the projects catalog
GET/api/communitiespublicRead the communities catalog
GET/api/whats-newbrowser sessionRead the changelog, filtered to the caller's ring
MethodPathAuth · scopeSummary
GET/api/contextbrowser sessionRead the floor's ambient context
MethodPathAuth · scopeSummary
GET/api/prints/slicing/queuepublicPoll for print requests that have never been sliced
POST/api/prints/slicing/resultpublicReport one slice outcome
POST/api/prints/slicing/gcode-chunkpublicUpload one chunk of a sliced G-code
POST/api/prints/slicing/gcode-commitpublicReassemble the uploaded chunks into one vault file
MethodPathAuth · scopeSummary
GET/api/healthpublicLiveness probe
GET/api/health/kvpublicWhite-box KV round-trip probe
GET/api/health/blobpublicWhite-box blob round-trip probe
MethodPathAuth · scopeSummary
GET/api/guestsbrowser sessionRead the pending visitor queue
POST/api/guestsbrowser sessionFile a visitor request as the host
MethodPathAuth · scopeSummary
POST/api/floorcast/provisionpublicStand up a new Floorcast tenant
MethodPathAuth · scopeSummary
POST/api/upload-mediabrowser sessionUpload a media file to the site blob store

Immersive Commons API Rate Limits

Free, not unlimited. Reads are unmetered within fair use. Write verbs carry per-token daily ceilings (UTC). These figures are sourced from the machine-readable /pricing.md; a 429 response carries a Retry-After header.

  • Highlight submissions3 / token / day
  • Image uploads30 / token / day (8 MB each)
  • Event RSVPs10 / token / day
  • Resource bookings10 / token / day
  • Transcription jobs5 / token / day
  • Research queries60 / member / hour
  • Feedback reports (anonymous)10 / IP / hour

Immersive Commons MCP Server (A2A & REST)

Three transports, one API. The same capabilities are reachable however your agent is wired. Point your client at whichever transport it speaks:

  1. 01 MCP (Streamable HTTP). Add /api/mcp to your MCP client and paste agt_... in the Authorization header. A no-auth docs surface also lives at /api/mcp-docs.
  2. 02 A2A (JSON-RPC 2.0). Agent-to-agent calls at /api/a2a.
  3. 03 Skills. Portable, runtime-agnostic skill definitions are indexed at /.well-known/agent-skills/index.json and installable from the public ic-skills repo (npx skills add immersive-commons/ic-skills), listed on skills.sh, which also ships the official SDK + CLI packages: @immersivecommons/sdk + @immersivecommons/cli + @immersivecommons/mcp (npm), immersivecommons (PyPI), and ic-go (Go), and immersivecommons (RubyGems). Docs are also mirrored at immersivecommons.mintlify.app.

Prefer to orient first? The full machine manifest — scope catalog, endpoints, rate limits — is at /.well-known/ai-agent.json, and the prose registration guide is /auth.md. Agent-readable context for the whole site is at /llms.txt.

Immersive Commons API Sandbox

Try writes without side effects. Getting started is free and self-serve: the default public tier costs $0, you mint your own token in the quickstart above, and a sandbox lets you exercise write verbs safely before you point them at live data.

A sandbox token is a normal agent token minted through the same human-approved device-code flow, with one flag flipped. It carries real scopes and authenticates like any token — the only difference is that write verbs return a simulated receipt instead of mutating anything, while reads serve real production data. Sandbox is a property of the token, not the URL: same endpoints, same agt_ format, same auth header.

To mint one, add "sandbox": true to the device-code start body, then complete the flow exactly as normal. The poll completion echoes sandbox: true so you can confirm what you received. The flag is immutable after mint — a test token can never silently become a live one; production write access means minting a new token through the same approval.

Mint a sandbox (test-mode) token

curl -sX POST https://www.immersivecommons.com/api/agent/signup/start \
  -H 'content-type: application/json' \
  -d '{"scopes":["events:read_upcoming","events:rsvp"],"client_name":"my-agent (sandbox)","sandbox":true}'

A machine-readable descriptor of the sandbox — what it simulates, which endpoints honor it, and its fail-closed rules — is served unauthenticated at /api/sandbox. Fetch it to discover the test surface before you mint a token. Standalone sandbox docs page: /sandbox (markdown twin at /sandbox.md).

A simulated write returns { ok: true, sandbox: true, simulated: true, would_have: {…} }, where would_have echoes the action, the scope that was checked, and your validated arguments. Read the receipt honestly: sandbox verifies your token holds the required scope, but does not run the deeper business-rule gates (live tier, floor-admin role, resource ownership, request signature) that the real call would. A green sandbox receipt means “well-formed and scoped,” not “guaranteed to succeed in production.”

  1. 01 Reads (list / get / search / status) — real production data.
  2. 02 Scoped writes (RSVP, book, submit highlight, set profile, request tier, admin approve/deny) — simulated receipt, no mutation.
  3. 03 Feedback & self-revoke — real: a sandbox agent that finds a real bug must be heard, and revoking a token is lifecycle, not floor data.
  4. 04 x402 donations & floor-admin toggles — not sandbox-eligible: a real payment rail is never faked, and anything the sandbox cannot prove it may safely simulate fails closed rather than risk a real mutation.