Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

Immersive Commons

REMOTE · WWW.IMMERSIVECOMMONS.COM · SCANNED AUG 3

Members-run AI builder space on Floor 10, Frontier Tower SF. 138 tools: events, news, directory.

+6 this week 70 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security66
Transport & Reachability100
Schema Quality & AI Usability74
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 28837 tokens (~181/item across 159 items; 156 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage93
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 80% of tool parameters carry a description.Partial
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · www.immersivecommons.com

# add to Claude Code
claude mcp add --transport http com-immersivecommons-floor10 https://www.immersivecommons.com/api/mcp
# ~/.codex/config.toml
[mcp_servers.com-immersivecommons-floor10]
url = "https://www.immersivecommons.com/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-immersivecommons-floor10": {
      "type": "remote",
      "url": "https://www.immersivecommons.com/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-immersivecommons-floor10 --url https://www.immersivecommons.com/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-immersivecommons-floor10:
    url: "https://www.immersivecommons.com/api/mcp"
// mcp.json
{
  "mcpServers": {
    "com-immersivecommons-floor10": {
      "type": "http",
      "url": "https://www.immersivecommons.com/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1
    • Tool coverage: 87% → 80% functional
    • New tool “ic_hack_results” functional
    • New tool “ic_hack_roster” functional
    • New tool “ic_hack_sign_nda” functional
    • New tool “ic_hack_submit” functional
    • New tool “ic_hack_team_create” functional
    • New tool “ic_hack_team_join” functional
    • New tool “ic_hack_team_leave” functional
    • New tool “ic_hack_team_list” functional
    • New tool “ic_hack_admin_phase” functional
    • New tool “ic_hack_admin_role” functional
    • New tool “ic_hack_bounty_post” functional
    • New tool “ic_hack_checkin” functional
    • New tool “ic_hack_get” functional
    • New tool “ic_hack_judge_list” functional
    • New tool “ic_hack_judge_score” functional
    • New tool “ic_hack_me” functional
    • New tool “ic_hack_register” functional
  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 +1
    • Tool “ic_capabilities” rewrote its description, which is the text the model reads security
  • 31 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 63

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://www.immersivecommons.com/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=www.immersivecommons.com CN=YR2,O=Let's Encrypt,C=US 17 Jul 2026 15 Oct 2026 RSA 2048 SHA256-RSA 51bcfabe885190c599674b4558583ad229d
SANs: www.immersivecommons.com
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f
DNSSEC secure

Validation of www.immersivecommons.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
immersivecommons.com. present 15019 8 Verified
www.immersivecommons.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000
x-content-type-options nosniff
x-frame-options SAMEORIGIN
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.immersivecommons.com/api/mcp Verified 200
http (plaintext) http://www.immersivecommons.com/api/mcp HTTPS enforced 308 https://www.immersivecommons.com/api/mcp
MCP tools — 156 exposed · ~28,421 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
floor10_extract_event_metadata ~102

Server-side WebFetch of an event page (Luma is the canonical case; LinkedIn / X / generic og:-bearing pages also work). Returns parsed { title, date, image, description, organization } so the agent doesn't have to scrape and parse OG / JSON-LD itself. Use the result to compose a HighlightStory. Args: { url }. Returns: a metadata map; empty fields where extraction missed.

NameTypeReqDescription
urlstringyes

No output schema declared.

No examples provided.

floor10_get_my_floor_member ~59

Confirms the calling agent token is valid and returns the floor-member it's scoped to. Use as a post-mint smoke check before submitting. Args: none. Returns: { member_id, member_name, token_prefix, scopes }.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

floor10_list_claimable_events ~232

Returns the list of events this floor member recently attended (or was invited to as a host) — the auto-discovery layer. Use this BEFORE asking the human 'what event did you go to?'; show them this list and let them pick. Source: graph.yaml attendance ingest, enriched with canonical URLs from data/events.yaml. Args: { status_filter? (e.g. ['checked_in','attended']), limit? (default 25, max 100) }. Returns: { count, total, generated_at, events: ClaimableEvent[] }. ClaimableEvent fields: event_api_id, title, date (YYYY-MM-DD), status (invited|approved|going|checked_in|attended), role, url, program, episode, registered_at, source.

NameTypeReqDescription
limitintegerDefault 25; max 100.
status_filterarrayOptional. Filter to one or more statuses. E.g. ["checked_in","attended"] for "really went". Default: all statuses (incl. "invited" so hosts see their own events).

No output schema declared.

No examples provided.

floor10_list_my_pending ~64

Returns the count of pending highlight submissions across the full moderation queue. Useful as a 'is there a backlog?' probe before adding more. (Per-member filtering is not exposed for v1; the queue is small.) Args: none. Returns: { count }.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

floor10_submit_highlight ~360

POST a HighlightStory for admin review. Same shape + same validation as the REST endpoint at /api/ingest/highlights/pending. Rate limit: 3 per token per UTC day. Re-submitting the same id refreshes the pending TTL (idempotent). Hard rules: no fabricated dates / quotes / member ids; news-wire third-person dek; candids first, posters last in images[]. See https://www.immersivecommons.com/docs/agent-submissions.

NameTypeReqDescription
actionstringyesVerb-clause completing "<member> <action> <event_title>". Lowercase. E.g. "spoke at", "hosted", "demoed at".
datestringyesDisplay ("MAY 08") or ISO date.
dekstringyesNews-wire third-person, 1-2 sentences. No editorial verbs. No first person. No fabricated quotes.
event_titlestringyes
event_urlstring
idstringyesSlug pattern YYYY-MM-DD-<member-slug>-<event-slug>. Lowercase, alphanumeric + hyphens.
image_focalsobjectOptional sparse map of subject focal points in [0, 1] coords (top-left origin).
imagesarrayyesPublic URLs only (not base64). Candids first, posters / Luma covers last. Lead card cycles through these.
member_idstringSlug from data/members.yaml. The token attributes the submission server-side regardless.
member_namestringyesDisplay name as it should appear on the card.
statsarrayConvention: RSVPS / ORGANIZATION / ROLE.

No output schema declared.

No examples provided.

floor10_upload_image ~262

Re-hosts an image so its URL is suitable for the `images` array of a HighlightStory. Pass `url` (recommended; server fetches + stores) or `data_url` (small files only, RFC 2397 inline base64). Storage is content-addressed at floor10/highlights/<member_id>/<sha256>.<ext> on Vercel Blob, public-readable, year-long cache. Idempotent: same bytes -> same URL. Rate limit: 30 uploads / token / UTC day (separate from the submission rate). Allowed types: image/jpeg|png|webp|gif|heic|heif|avif. Max 8 MB per upload. Returns: { url, bytes, content_type, sha256, deduped }.

NameTypeReqDescription
data_urlstringInline data URL ("data:image/jpeg;base64,..."). Use for screenshots / small captures the agent generated locally. Capped at the same 8 MB ceiling; base64 has ~33% overhead so practical max is ~6 MB o…
urlstringPublic URL of an image to fetch and re-host. Recommended path. http(s) only; localhost / cloud-metadata addresses are blocked.

No output schema declared.

No examples provided.

floorcast_effective_features ~138

Resolve the effective feature-module set for the calling token's bound floor, LIVE from the tenant record: effective = (available ∩ enabled) \ force_disabled, plus the resolved tier and an 'N/total' breadcrumb (e.g. 'AI tier, 8/8 features live'). FAIL-CLOSED: on a both-down outage where the tenant record is unavailable, returns { ok:false, reason:'tenant-record-unavailable' } — NEVER a synthesized full set. Read-only; any valid token. Args: none. Returns: { ok, tenant, tier, available, enabled, force_disabled, effective, breadcrumb }.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

floorcast_my_roles ~116

Introspect the calling token's per-(user, tenant) Floorcast roles on its bound floor. Returns the resolved ring + display label + the canActAs verdicts (member / floor-admin / super-admin). Resolves the SAME way the auth gate does (one shared resolver — no drift). On a token with no tied Clerk identity it returns the fail-open public shape. Read-only; no scope beyond a valid token. Args: none. Returns: { tenant, ring, role_label, can_act_as }.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

floorcast_preview_ai_curation ~90

Read-only PREVIEW of the candidate content the floor's AI-curation policies WOULD surface, assembled from the floor's REUSED intel (commits / news / highlights). Writes NOTHING. Returns a per-policy { policy, candidate } list (candidate is null when the policy has no intel). Static-tier floors and floor10 (slug-fenced) return an empty list. Args: none.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

floorcast_push ~308

Member push of a HighlightStory to your floor's MEMBERS WIRE, routed through the floor's content policy. Default policy 'moderation_queue' ⇒ the story lands PENDING for operator approval ({ ok:true, status:'pending', id }). A 'free_push_with_retract' floor (floor10 only this increment) ⇒ the story goes straight to ACTIVE ({ ok:true, status:'active', id }) — a deliberate policy bypass of the operator gate, retractable via floorcast_unpush. CONSEQUENTIAL. Typed refusals: { ok:false, reason } where reason is 'forbidden' (not a member on this floor), 'invalid' (story failed validation), 'approve-failed' (free_push: enqueued but the active-promotion failed; the pending record is left for operator visibility), or 'tenant-not-provisioned' (NON-floor10 push is currently DENIED — not 'lands in moderation_queue'; multi-tenant push ships in a follow-on). Same story shape + validation as floor10_submit_highlight. Args: the HighlightStory fields.

NameTypeReqDescription
actionstringyes
datestringyes
dekstringyes
event_titlestringyes
event_urlstring
idstringyes
image_focalsobject
imagesarrayyes
member_idstring
member_namestringyes
statsarray

No output schema declared.

No examples provided.

floorcast_run_ai_curation ~135

Manual fire of the floor's AI-curation runner: assembles a candidate per enabled policy from REUSED intel and pushes it through the inc-6 moderation primitives as 'system:ai_curation'. Non-floor10 AI floors land the candidate PENDING (operator-gated). Floor-Admin gated. Static floors return { ok:false, reason:'feature-not-available' }; floor10 is slug-fenced and ALSO denied (absolute in inc-7). De-dups against the active + pending lists so a re-run does not poison the pending queue. Args: none. Returns: a per-policy result list.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

floorcast_set_ai_policy ~171

Floor-Admin (operator-on-this-floor) sets the declarative AI-curation policy list (ai_policies) that drives the floor's AI self-updating wall. PERSISTS the tenant record via the inc-6 writer. Runs the FULL authz gate first: a non-Floor-Admin gets { ok:false, reason:'forbidden' } (no write). A live KV write failure surfaces { ok:false, reason:'write-failed', error }. Each policy is { type: 'top_commit'|'latest_news'|'rotate_highlights', enabled?, max_items? }. On success returns { ok:true, record }. Scope: a valid floor-bound token. Args: { policies }.

NameTypeReqDescription
policiesarrayyesThe AI-curation policy list to persist on this floor.

No output schema declared.

No examples provided.

floorcast_set_feature_availability ~212

Super-Admin (apex flag AND operator-on-THIS-floor) sets which modules a floor is ALLOWED to enable. PERSISTS the tenant record (inc-6). Runs the FULL per-tenant super-admin gate first: a floor-admin WITHOUT the apex flag, or a super-admin on a DIFFERENT floor, gets { ok:false, reason:'forbidden' } (no write). A live KV write failure surfaces { ok:false, reason:'write-failed', error } (no 500). On success returns { ok:true, record }. NOTE: the force-disable kill-switch (setForceDisabled) is intentionally NOT exposed as an MCP verb this increment — it stays human/lib-only as a deliberate safety posture (re-evaluated when the inc-7 human override console lands). Args: { module, available }.

NameTypeReqDescription
availablebooleanyestrue to make available, false to remove.
modulestringyesModule id (one of the 8 enum modules).

No output schema declared.

No examples provided.

floorcast_set_feature_enabled ~193

Floor-Admin (operator-on-this-floor) toggles a module in the floor's ENABLED set; a module must be AVAILABLE on the floor to enable. PERSISTS the tenant record (inc-6). Runs the FULL authz + availability gate first: a non-Floor-Admin, or enabling a module not available on the floor, gets { ok:false, reason:'forbidden' } (no write). A live KV write failure surfaces { ok:false, reason:'write-failed', error } (no 500). On success returns { ok:true, record } (the persisted next-record). Scope: a valid floor-bound token. Args: { module, enabled }. floorcast_effective_features reflects the toggle on the next read.

NameTypeReqDescription
enabledbooleanyestrue to enable, false to disable.
modulestringyesModule id (one of the 8 enum modules).

No output schema declared.

No examples provided.

floorcast_unpush ~139

Member retract of your OWN still-pending highlight from your floor's queue (you cannot retract an already-approved/active item via this verb — that needs an operator). Routed through the floor content policy; the gate is server-side (ownership-checked). CONSEQUENTIAL. Returns { ok:true, id } on success; typed refusals { ok:false, reason } where reason is 'forbidden' (not your submission), 'not-found' (no such pending item), or 'tenant-not-provisioned' (NON-floor10 is currently DENIED). Args: { id }.

NameTypeReqDescription
idstringyesThe pending highlight id to retract.

No output schema declared.

No examples provided.

ic_activity_get_recent ~147

Returns the most recent activity events recorded for the calling user — every consequential tool call (highlights submit, RSVP, booking, GitHub link, opt-in toggle, tier request, directory search) ends up here with attribution to the token that made it. Each event has { ts, tool, scope, token_prefix?, token_label?, via, success, error?, meta? }. Useful for the human to audit 'which of my agents has been doing what.' Args: { limit?: number (max 100, default 25) }. Required scope: membership:read.

NameTypeReqDescription
limitintegerHow many recent events to return. Default 25, capped at 100.

No output schema declared.

No examples provided.

ic_admin_agent_audit_search ~310

Cross-member audit search over class-B integration activity (DESIGN §11). Walks the matching clients → their bearer tokens → those tokens' outbox threads → each thread's actions, newest-first. Surfaces actions reachable from a client's OWN outbox (the integration's blast radius); counterparty-side actions are out of v1 scope (no reverse index yet). Operator-only (admin:agent_clients + live operator re-check). Args: { client_id?: string, operator_human?: string, member_id?: string, kind?: 'policy_eval'|'member_tap'|'system'|'counterparty', since?: ISO datetime, limit?: number (default 200), offset?: number (default 0) }. Returns: { ok, hits, total, has_more } — total counts every filtered hit; page past the cap with offset. Required scope: admin:agent_clients.

NameTypeReqDescription
client_idstringRestrict to one client's actions.
kindstringRestrict to one action kind.
limitintegerCap on returned actions, newest-first (default 200).
member_idstringRestrict to actions whose thread is addressed TO this recipient.
offsetintegerPagination offset into the filtered newest-first list (default 0).
operator_humanstringRestrict to one operator-of-record's clients.
sincestringISO datetime lower bound — only actions at/after this.

No output schema declared.

No examples provided.

ic_admin_agent_client_list ~158

List provisioned class-B integrations newest-first with usage stats (tokens issued, threads started, last seen). Operator-only (admin:agent_clients + live operator re-check). Secret hashes are never returned. calls_per_day / rejection_rate render absent until a per-call counter lands (v1 has none). Args: { include_revoked?: boolean (default true), limit?: number, offset?: number }. Returns: { ok, clients, has_more } — page past the cap with offset. Required scope: admin:agent_clients.

NameTypeReqDescription
include_revokedbooleanInclude revoked clients (default true).
limitintegerMax clients (default 200).
offsetintegerPagination offset (default 0).

No output schema declared.

No examples provided.

ic_admin_agent_client_register ~339

Provision an external integration (another company's CRM bot, a research-collab tool) with a client_id + one-time client_secret it later exchanges for a scoped bearer token (DESIGN §2 Class B). Operator-only: gates on admin:agent_clients AND a live operator-tier re-check. The plaintext secret is returned EXACTLY ONCE (only its hash is stored) — a lost secret means re-register. Grantable scopes are limited to the agent:* family (directory:read / request_meeting / send_intro / ping / thread:write / inbox:read / policy:read); any other requested scope (esp. admin:*) is REFUSED and listed in denied_scopes. Args: { name, operator_human, scopes: string[], contact, autonomy?, requires_signature?, budget_overrides? }. Returns: { ok, client_id, client_secret_once, client }. Required scope: admin:agent_clients.

NameTypeReqDescription
contactstringyesContact for the operator-of-record (email / handle / URL) so a revoke decision has a human to reach.
namestringyesDisplay name of the integration (e.g. 'Skew meeting bot').
operator_humanstringyesThe human operator-of-record who vouches for this integration.
requires_signaturebooleanWhen true, the eventual bearer must ALSO carry a valid Ed25519 signature (the pubkey is bound at grant time).
scopesarrayyesExplicitly-enumerated scopes — must be a non-empty subset of the grantable agent:* family. Non-grantable scopes are refused (denied_scopes).

No output schema declared.

No examples provided.

ic_admin_agent_client_revoke ~184

Revoke an integration and flag its AUTONOMOUS actions for recipient re-confirmation (DESIGN §9 — interactive actions are NOT flagged, each had per-call approval). Revokes every linked bearer token so the integration is dead immediately, snapshots prior state for one-step revert (DESIGN §18), and returns how many autonomous actions were flagged + tokens revoked. Operator-only (admin:agent_clients + live operator re-check). Idempotent. Args: { client_id: string (cli_<base32>), reason: string }. Returns: { ok, actions_flagged, tokens_revoked }. Required scope: admin:agent_clients.

NameTypeReqDescription
client_idstringyesThe cli_<base32> id from ic_admin_agent_client_list.
reasonstringyesWhy the integration is being revoked — recorded on the client record + rollback snapshot.

No output schema declared.

No examples provided.

ic_admin_approve_event ~339

Approve a pending 'save the date' event draft: flows the wrapped KioskEvent into floor10:events:approved (dedupe-prepend, keep newest 50), drops it from the pending queue, and writes an audit entry. The kiosk events page merges approved drafts with the live Luma list (live wins on the shared slug); once the real Luma event goes live, ic.kv_push.push_events prunes the draft automatically. This NEVER creates a public Luma event — it posts a no-RSVP save-the-date card; IC staff create the live Luma event from the request detail afterward. Two-step: omit `confirm` (or pass false) for a dry-run preview that returns what the call would do without mutating; pass `confirm: true` to actually apply. Idempotent: a missing / already-handled / TTL-expired id returns ok:false (and cleans the stale list pointer). Rate-limited to 20 approve+reject mutations per token per UTC day; dry-run calls do NOT count. Args: { id, confirm? }. Returns: dry-run shape on confirm=false; { ok, id } on confirm=true. Required scope: admin:events_review.

NameTypeReqDescription
confirmbooleanSet to true to actually mutate. When false / omitted, returns a dry-run preview that does NOT change state and does NOT count against the daily rate limit.
idstringyesThe pending event id to approve — the draft slug (e.g. 'demo-night-a1b2c3'), as returned by ic_admin_list_pending_events / ic_events_request.

No output schema declared.

No examples provided.

ic_admin_approve_highlight ~93

Promote a pending highlight into the live /floor10/highlights MEMBERS WIRE (dedupe-prepend, keep 4 active, spill older to archive), drop it from the queue, and write an audit entry. Idempotent: a missing or expired id returns ok:false. Scope: admin:highlights_review.

NameTypeReqDescription
idstringyesThe pending highlight id to approve (the submission slug).

No output schema declared.

No examples provided.

ic_admin_approve_key_request ~301

Approve a pending Z.ai key request and MINT the proxy key. Two-step: omit `confirm` (or pass false) for a dry-run preview of the exact proxy block that would be minted; pass `confirm: true` to mint. IDEMPOTENT on request_id — a second confirmed approve returns the SAME key (it does NOT mint a second key); the plaintext key is surfaced ONLY on the first mint. For member keys, `multiplier` overrides the requested multiplier. The minted key works ONLY against the IC→Z.ai gateway (it carries zero IC tool scopes). Rate-limited to 20 approve+deny mutations per token per UTC day; dry-run + idempotent re-approve do NOT count. Args: { request_id, multiplier?: 1|2|5|10|20, confirm? }. Returns dry-run shape on confirm=false; on the first confirm:true mint, { ok, minted:true, agent_token, token_prefix, proxy }. Required scope: admin:llm_keys.

NameTypeReqDescription
confirmbooleanSet to true to actually mint. When false / omitted, returns a dry-run preview that does NOT mint and does NOT count against the daily rate limit.
multiplierMember keys only: override the requested weekly-token multiplier. Ignored for workshop keys.
request_idstringyesThe id of the pending request (from ic_admin_list_pending_key_requests).

No output schema declared.

No examples provided.

ic_admin_approve_ownership ~261

Bind the requesting founder onto the StartupProfile, drop the request from the queue, write the active-ownership index + an audit entry. Once bound, that founder's agent/session may edit the page + post news. MULTI-OWNER + ADDITIVE: a startup may have many co-founders; approving ADDS the requester to the owner set (the first owner becomes the primary founder_clerk_user_id, each subsequent one is appended) — NO existing owner is ever displaced, so there is no rebind/confirm step. Idempotent: re-approving an existing owner, or a missing/expired id, is a clean no-op (ok:false only on missing/expired). Args: { id }. (confirm/force are accepted for back-compat but ignored.) Returns { ok, id, slug, founder_clerk_user_id, current_owners }. Required scope: admin:ownership_review.

NameTypeReqDescription
confirmbooleanDeprecated/no-op. Multi-owner approval is additive (no owner is displaced), so no confirmation is needed. Accepted for back-compat.
forcebooleanDeprecated/no-op alias for confirm — additive approve never needs it.
idstringyesThe pending ownership request id to approve.

No output schema declared.

No examples provided.

ic_admin_approve_tier_request ~294

Approve a pending tier request and set the user's tier. Two-step: omit `confirm` (or pass false) for a dry-run preview that returns what the call would do without mutating state. Pass `confirm: true` to actually apply. If `tier` is omitted, the user is approved to the tier they requested; pass `tier` to override (e.g. they asked for ic-member but you approve ai-floor). Rate-limited to 20 approve+deny mutations per token per UTC day; dry-run calls do NOT count. Args: { user_id, tier?: 'ft-member'|'ai-floor'|'ic-member'|'operator', reason?, confirm? }. Returns: dry-run shape on confirm=false; { ok, user_id, from, to, action: 'approve' } on confirm=true. Required scope: admin:tier_review.

NameTypeReqDescription
confirmbooleanSet to true to actually mutate. When false / omitted, returns a dry-run preview that does NOT change state and does NOT count against the daily rate limit.
reasonstringOptional note recorded in the audit trail.
tierstringOptional override. If omitted, approves the user to the tier they requested. 'operator' is approvable here even though it isn't self-requestable.
user_idstringyesClerk user_id of the pending requester.

No output schema declared.

No examples provided.

ic_admin_deny_key_request ~215

Deny a pending Z.ai key request. Marks it denied + removes it from the queue; no key is minted. Two-step: omit `confirm` (or pass false) for a dry-run preview, `confirm: true` to apply. Refuses to deny an already-approved request (revoke the minted key at /floor10/agent-console instead). Rate-limited to 20 approve+deny mutations per token per UTC day; dry-run does NOT count. Args: { request_id, reason?, confirm? }. Returns dry-run shape on confirm=false; { ok, request_id, was_pending } on confirm=true. Required scope: admin:llm_keys.

NameTypeReqDescription
confirmbooleanSet to true to actually deny. When false / omitted, returns a dry-run preview that does NOT mutate and does NOT count against the daily rate limit.
reasonstringOptional note recorded in the audit trail.
request_idstringyesThe id of the pending request to deny.

No output schema declared.

No examples provided.

ic_admin_deny_tier_request ~233

Deny a pending tier request. Clears the pending fields + KV snapshot; the user's tier is unchanged. Two-step: omit `confirm` (or pass false) for a dry-run preview. Pass `confirm: true` to actually apply. The optional `reason` is recorded in the audit log and is surfaced to the requester on their /membership page so they understand why. Rate-limited to 20 approve+deny mutations per token per UTC day; dry-run calls do NOT count. Args: { user_id, reason?, confirm? }. Returns: dry-run shape on confirm=false; { ok, user_id, tier, was_pending } on confirm=true. Required scope: admin:tier_review.

NameTypeReqDescription
confirmbooleanSet to true to actually mutate. When false / omitted, returns a dry-run preview that does NOT change state and does NOT count against the daily rate limit.
reasonstringOptional note. Recorded in the audit trail and shown to the requester on their /membership page.
user_idstringyesClerk user_id of the pending requester.

No output schema declared.

No examples provided.

ic_admin_leaderboard_inspect ~170

Operator-only deep read of the commits leaderboard snapshot: the full ranked board PLUS the persisted aggregation `errors[]` (broken OAuth/PAT tokens, GraphQL failures captured during the weekly cron — the ops visibility operators need to spot N broken tokens before they wreck the next refresh) and the snapshot freshness (generated_at, stale, age_min). Each member carries { rank, handle, name, commits, private? } (private = folded-in private-contribution COUNT, never repo content). Returns: { ok, generated_at, stale, age_min, member_count, members: [...], errors: [{ userId, reason }] }. Required scope: admin:leaderboard_review.

NameTypeReqDescription
limitintegerHow many ranked members to return. Default 500, capped at 500.

No output schema declared.

No examples provided.

ic_admin_list_feedback ~206

Read the agent-voice queue. Default returns the newest 25 summaries (preview = first 200 chars of message + attribution + priority + kind + resolved flag). Pass full=true to get full records (for export / triage). Filters AND together: kind, priority, resolved (true = closed only, false = open only, omit = both). Returns: { ok, count, total, scanned, filter, records }. Newest first. Required scope: admin:feedback_review.

NameTypeReqDescription
fullbooleanIf true, return full FeedbackRecord (incl. ip_hash, contact). Default false = summaries.
kindstringFilter to one kind.
limitintegerDefault 25; max 200.
offsetintegerPaging cursor. Default 0.
prioritystringFilter to one priority.
resolvedbooleanTri-state. true = resolved only, false = open only, omit = both.

No output schema declared.

No examples provided.

ic_admin_list_members ~287

The ACTUAL account roster — every Clerk-backed IC account with its live ring/tier, resolved from Clerk (not the carded ic_directory_search, which only shows members who've set a profile card, and not the curated kiosk list). This is what you want to answer 'who are the members' or find a specific account (e.g. one that hasn't set a card yet). Each member: { user_id, name, email, tier ('public'|'ft-member'|'ai-floor'|'ic-member'|'operator'), pending_request (the tier they've requested but not yet been granted, or null), created_at }. Args: { tier?: filter to one ring; q?: case-insensitive name/email/user_id substring filter; limit?: number (default 200, max 500); offset?: number (default 0) }. Filters apply to the fetched page; `total` is the full Clerk account count and `has_more` tells you to page with offset (default limit covers all IC accounts in one page today). Required scope: admin:tier_review.

NameTypeReqDescription
limitintegerPage size (default 200).
offsetintegerPage offset (default 0).
qstringCase-insensitive substring match on name / email / user_id.
tierstringFilter the page to accounts currently at this ring.

No output schema declared.

No examples provided.

ic_admin_list_pending_events ~337

Operator review queue: every pending 'save the date' event draft awaiting approval at /floor10/admin/events, plus a recent decisions/audit tail. Two sources feed the queue (the `source` field disambiguates): 'member_request' (a member's agent via ic_events_request) and 'kiosk_submit' (Ray's `events kiosk-submit` CLI). Each pending record: { id, title, when, venue?, host?, description?, source, requested_by?, submitted_at, submitted_by, request? } — `request` carries the extra Luma-shaped fields the kiosk card doesn't render (end / capacity / visibility / contact). Each audit entry: { id, action ('approve'|'reject'), by_clerk_user_id, at, reason?, title?, when? }. Use BEFORE ic_admin_approve_event / ic_admin_reject_event to see what's waiting and why. Args: { audit_tail?: number (default 12, max 500), detail?: 'summary'|'full' (default 'full'; 'summary' trims each pending row to id/title/when/source/submitted_at) }. Returns: { ok, count, pending, audit }. Required scope: admin:events_review.

NameTypeReqDescription
audit_tailintegerHow many recent decisions to include. Default 12; max 500.
detailstringResponse weight. 'full' (default) returns every pending field per row incl. description + the nested Luma-shaped request; 'summary' trims each pending row to { id, title, when, source, submitted_at }…

No output schema declared.

No examples provided.

ic_admin_list_pending_highlights ~159

Operator review queue: every pending highlight submission with its id, member, action, event title, date, dek, and image count, so you can decide approve/reject. Excludes test fixtures + stale pointers. Pair with ic_admin_approve_highlight / ic_admin_reject_highlight. Args: { detail?: 'summary'|'full' (default 'full'; 'summary' trims each row to id/member_name/action/event_title/date) }. Scope: admin:highlights_review.

NameTypeReqDescription
detailstringResponse weight. 'full' (default) returns every review field per row; 'summary' trims each row to { id, member_name, action, event_title, date } for cheap queue triage.

No output schema declared.

No examples provided.

ic_admin_list_pending_key_requests ~94

Returns the operator's pending Z.ai-key-request queue plus a recent audit tail. Each pending record: { id, kind ('workshop'|'member'), requester_clerk_user_id, requester_name?, event_id?, event_title?, multiplier?, note?, created_at }. Use BEFORE ic_admin_approve_key_request / ic_admin_deny_key_request. Args: none. Required scope: admin:llm_keys.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ic_admin_list_pending_ownership ~143

Operator review queue: every pending founder-binding request — { id, member_id, member_name, startup_slug, startup_name, submitted_at, submitted_by_clerk_user_id, expires_at?, already_owned, current_owner?, current_owners? }. Multi-owner: `already_owned` now just flags that the slug already has >=1 owner — it is INFO, not a conflict (approving ADDS the requester as a co-founder; current_owners lists the existing set). Pair with ic_admin_approve_ownership / ic_admin_reject_ownership. Args: none. Returns { ok, count, pending }. Required scope: admin:ownership_review.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ic_admin_list_pending_tier_requests ~135

Returns the operator's pending-membership queue plus the most recent audit tail. Each pending record: { user_id, email, display_name, current_tier, requested_tier, note, submitted_at }. Each audit entry: { user_id, email, action ('approve'|'deny'|'auto-promote'|'request'|'demote'), from, to?, requested?, reason?, by_clerk_user_id?, at }. Use BEFORE ic_admin_approve_tier_request / ic_admin_deny_tier_request to see who's waiting and why. Args: none. Required scope: admin:tier_review.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ic_admin_list_recent_startup_content ~162

Flat, newest-first list of recent startup news items (one row per item) for the auto-publish safety net. 'Recent' = posted within `days` (default 7) OR the parent profile was edited in that window. Each row: { slug, startup_name, public_visible, item_id, title, url?, posted_at, source?, profile_updated_at }. A hidden profile still surfaces its rows so you can see + restore what you took down. Pair with ic_admin_takedown_startup_content. Args: { days?: number (default 7) }. Returns { ok, count, rows }. Required scope: admin:content_review.

NameTypeReqDescription
daysintegerLookback window in days (default 7).

No output schema declared.

No examples provided.

ic_admin_reject_event ~246

Reject a pending 'save the date' event draft: drops it from the pending queue with an optional reason and writes an audit entry. Does NOT publish anything. Two-step: omit `confirm` (or pass false) for a dry-run preview; pass `confirm: true` to actually apply. The optional `reason` is recorded in the audit log (operator-facing; member requests do not surface it back to the requester today). Idempotent — rejecting an already-gone id still records the decision and returns ok. Rate-limited to 20 approve+reject mutations per token per UTC day; dry-run calls do NOT count. Args: { id, reason?, confirm? }. Returns: dry-run shape on confirm=false; { ok, id } on confirm=true. Required scope: admin:events_review.

NameTypeReqDescription
confirmbooleanSet to true to actually mutate. When false / omitted, returns a dry-run preview that does NOT change state and does NOT count against the daily rate limit.
idstringyesThe pending event id to reject — the draft slug.
reasonstringOptional moderator note, recorded in the audit log.

No output schema declared.

No examples provided.

ic_admin_reject_highlight ~75

Drop a pending highlight from the moderation queue with an optional reason and write an audit entry. Does not publish. Scope: admin:highlights_review.

NameTypeReqDescription
idstringyesThe pending highlight id to reject (the submission slug).
reasonstringOptional moderator note, recorded in the audit log.

No output schema declared.

No examples provided.

ic_admin_reject_ownership ~91

Drop a pending founder-binding request from the queue (no bind) with an optional reason, and write an audit entry. Args: { id, reason? }. Returns { ok, id, slug? }. Required scope: admin:ownership_review.

NameTypeReqDescription
idstringyesThe pending ownership request id to reject.
reasonstringOptional moderator note, recorded in the audit log.

No output schema declared.

No examples provided.

ic_admin_resolve_feedback ~205

Mark one ticket resolved with an optional note. Two-step: omit `confirm` (or pass false) for a dry-run preview that returns the would-be-updated record without mutating. Pass `confirm: true` to actually apply. Already-resolved tickets return error_kind 'already_resolved' (idempotent at the channel level — no double-write of resolved_at). Args: { ticket_id, note?, confirm? }. Returns: dry-run shape on confirm=false; { ok, record } on confirm=true. Required scope: admin:feedback_review.

NameTypeReqDescription
confirmbooleanSet true to actually mutate. When false / omitted, returns a dry-run preview that does NOT change state.
notestringOptional resolution note. Recorded on the record. Useful for 'shipping in v1.18' or 'wontfix — out of scope'.
ticket_idstringyesticket_id from a prior submit (format fb_*).

No output schema declared.

No examples provided.

ic_admin_takedown_startup_content ~192

Pull auto-published founder content. With `item_id`: remove that single news item from the profile's news[]. Without `item_id`: hide the WHOLE startup (public_visible=false). Both rebuild the public cards, mirror to blob, revalidate the public pages, and write an audit entry. Idempotent (removing an already-gone item / hiding an already-hidden profile returns ok:true). NB: a removed news item cannot be restored — the founder must re-post it. Args: { slug, item_id?, reason? }. Returns { ok, slug, item_id?, scope }. Required scope: admin:content_review.

NameTypeReqDescription
item_idstringNews item id to remove. Omit to hide the whole profile.
reasonstringOptional moderator note, recorded in the audit log.
slugstringyesThe startup slug to act on.

No output schema declared.

No examples provided.

ic_agent_directory_lookup ~200

Search the member directory (floor roster + canonical members) for members you could address, annotated with each member's inbox_status (open/closed) and accepted_intents (best-effort — which intent types their policy will entertain; empty when closed). This is a routing HINT ('don't bother sending a meeting_request to a closed inbox'), not the authoritative decision — the policy engine still evaluates the real envelope. Closed-inbox members are still returned so you see they exist. Args: { query: string (2-80 chars), limit?: number (default 20, max 50) }. Returns: { ok, query, count, results: [{ member_id, member_name, inbox_status, accepted_intents }] }. Required scope: agent:directory:read.

NameTypeReqDescription
limitintegerDefault 20, max 50.
querystringyesName / display-name / member-id fragment, 2-80 chars.

No output schema declared.

No examples provided.

ic_agent_inbox_block ~259

Add an entry to YOUR inbox blocklist (the policy.blocklist your policy engine consults before any rule). Future envelopes from a blocked sender are silently dropped — they get an opaque ok-shape and never learn they're blocked. Specify EXACTLY ONE of operator / member / client. Idempotent (re-blocking an existing entry is a no-op success). Optional `reason` is recorded on a server-side audit row only (the blocklist itself stores no reason). The owner is always you (the token's member_id) — you can only manage your own blocklist. Args: { operator?: string, member?: string, client?: string, reason?: string }. Returns: { ok, blocklist, changed }. Required scope: agent:inbox:write. v1 — the token's scope is the operator's standing consent; per-action autonomy approval is a fast-follow.

NameTypeReqDescription
clientstringBlock by agent_client client_id (class-B).
memberstringBlock by member_id.
operatorstringBlock by operator_human (the human behind the sending token).
reasonstringOptional note — recorded on a server-side audit row, NOT on the blocklist entry.

No output schema declared.

No examples provided.

ic_agent_inbox_get_thread ~161

Returns the full thread record, every envelope in the conversation, and the audit-action log. Caller must be either the recipient (thread.parties.to.member_id matches token's member_id) OR the original sender (thread.parties.from.token_sha256 matches token's sha256). Otherwise returns 'thread_not_found' (404-shape — does not leak that a thread exists for someone else). Args: { thread_id: string (thr_<crockford-base32>) }. Returns: { ok, thread, envelopes, actions }. Required scope: agent:inbox:read.

NameTypeReqDescription
thread_idstringyesThread id from ic_agent_inbox_list_threads or ic_agent_inbox_send_envelope. Shape thr_<26-char base32>.

No output schema declared.

No examples provided.

ic_agent_inbox_list_blocks ~86

Return the blocklist entries on YOUR inbox policy. Each entry is exactly one of { operator } | { member } | { client }. Empty array when you've blocked nobody (or have no policy yet). Caller-scoped to the token's member_id. Args: none. Returns: { ok, count, blocklist }. Required scope: agent:inbox:read.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ic_agent_inbox_list_threads ~143

Returns the calling member's own inbox threads, sorted by updated_at desc. Caller-scoped server-side — the member_id is taken from the token, so an agent can only ever see its operator's inbox. Use this BEFORE `ic_agent_inbox_get_thread` to find what's new. Args: { limit?: number (default 25, max 100), offset?: number (default 0) }. Returns: { ok, count, threads }. Required scope: agent:inbox:read.

NameTypeReqDescription
limitintegerDefault 25, max 100.
offsetintegerDefault 0. Pair with limit for paging.

No output schema declared.

No examples provided.

ic_agent_inbox_reply ~377

Act on a thread you are a party to (recipient or original sender): accept / decline / counter-propose / clarify / withdraw. Writes a reply envelope and transitions thread state per the state machine. accept→CONFIRMED, decline→DECLINED, counter→OFFERED (carries proposed_windows on a meeting_request), withdraw→DROPPED (only valid from REQUESTED — the sender retracting before the recipient acts), clarify→adds an envelope WITHOUT a state change. Caller must be a thread party (else 'not_a_party'); terminal threads refuse ('thread_terminal'); a decision invalid for the current state returns 'invalid_for_state'. The actor member_id is taken from the token. Args: { thread_id: string (thr_<base32>), decision: 'accept'|'decline'|'counter'|'clarify'|'withdraw', message?: string ≤2000, proposed_windows?: [{ start: ISO, end: ISO, tz_hint?: string }] }. Returns: { ok, envelope_id, new_state }. Required scope: agent:thread:write. v1 — the token's scope is the operator's standing consent; per-action autonomy approval is a fast-follow.

NameTypeReqDescription
decisionstringyesaccept→CONFIRMED · decline→DECLINED · counter→OFFERED (meeting_request: include proposed_windows) · clarify→envelope-only, no transition · withdraw→DROPPED (sender-side, only from REQUESTED).
messagestringOptional human note carried on the reply envelope. Sanitized + length-capped server-side.
proposed_windowsarrayFor decision=counter on a meeting_request: the new window options.
thread_idstringyesThread id (thr_<base32>) from list_threads / get_thread.

No output schema declared.

No examples provided.

ic_agent_inbox_send_envelope ~769

Route a typed intent (ping / request_meeting / send_intro) to another IC member's agent inbox. Recipient's policy engine decides what happens — store + notify, store + queue-for-tap, silently drop (blocklist), or refuse (inbox closed). Server-side: sanitizes body (C0 controls / zero-width / NFKC), wraps into the per-intent payload, persists thread + envelope + sender-history + audit, evaluates policy, returns the decision. Scopes per intent: ping → agent:ping (ai-floor+); request_meeting → agent:request_meeting (ic-member+); send_intro → agent:send_intro (ic-member+). send_intro brokers an introduction TO the recipient and requires intro_target_name + body (the intro_pitch) + expected_outcome + consent_target_has_opted_in=true (anti-spam — you MUST have the target's consent). Idempotency: pass `idempotency_key` to make the (token, key) pair cached for 24h. Returns: { ok, envelope_id, thread_id, state, policy_decision }. Recipient inbox closed → mcpError. Blocklisted senders get an opaque ok-shape with random ids (silent-block — no persistence visible to the sender; the audit row is server-side only). PRECHECK: call ic_agent_directory_lookup first — a member whose inbox_status is "closed" (the default for newly-joined members) cannot be reached and this verb will refuse. v1 SHIP note: request_meeting wraps body into context_summary with sensible defaults until the agent-console UI exposes full per-intent args.

NameTypeReqDescription
bodystringFree-form context. REQUIRED for ping (≤800). For request_meeting: becomes context_summary. For send_intro: becomes intro_pitch (≤4000). Sanitized server-side.
consent_target_has_opted_inbooleansend_intro: you attest the intro target has consented. MUST be true — the server rejects false/absent (anti-spam, DESIGN §5).
expected_outcomestringsend_intro: what you're asking the recipient to do. REQUIRED for send_intro.
idempotency_keystringOptional deterministic key. Same (token, key) within 24h returns the same response. Use UUIDs or a deterministic-from-source hash.
intentstringyesping = heads-up, no reply expected, ≤800 chars, no URLs (anti-phish). request_meeting = meeting invite; body becomes context_summary (recipient counter-proposes windows in v1). send_intro = broker an…
intro_target_contextstringsend_intro: short context on who the target is / why (optional).
intro_target_linkedin_urlstringsend_intro: the intro target's LinkedIn URL (optional).
intro_target_namestringsend_intro: name of the person being introduced TO the recipient.
intro_target_orgstringsend_intro: the intro target's org (optional).
tostringyesRecipient IC member slug (e.g. 'nicholas-e', 'michalis'). Must be addressable — their inbox_status must be 'open'. Resolve the slug and check inbox_status via ic_agent_directory_lookup.

No output schema declared.

No examples provided.

ic_agent_inbox_unblock ~141

Remove an entry from YOUR inbox blocklist. Specify EXACTLY ONE of operator / member / client, matching the original block target. Idempotent (removing an entry that isn't present is a no-op success). The owner is always you (the token's member_id). Args: { operator?: string, member?: string, client?: string }. Returns: { ok, blocklist, changed }. Required scope: agent:inbox:write.

NameTypeReqDescription
clientstringUnblock by agent_client client_id.
memberstringUnblock by member_id.
operatorstringUnblock by operator_human.

No output schema declared.

No examples provided.

ic_agent_inbox_undo ~208

Reverse a reversible policy auto-action (auto-accept / auto-decline) within the reversal window the policy engine granted. Forward transitions are one-way, so undo restores the EXACT prior state recorded on the auto-action's audit row. Gating: the action must exist + you must be a thread party (else 'not_a_party' / 'thread_not_found'); the thread must still carry an open reversible_until and the action must encode a recoverable prior_state (else 'invalid_for_state' — window closed or nothing reversible). On success the thread is restored, the window is cleared (one undo per window), and a reversal audit row is written. Args: { action_id: string (act_<base32>) }. Returns: { ok, envelope_id, new_state }. Required scope: agent:inbox:write.

NameTypeReqDescription
action_idstringyesAudit action id (act_<base32>) of the auto-action to reverse — from get_thread's actions[].

No output schema declared.

No examples provided.