AI Team OS
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| team_statusA | Get a team's status summary — team info + members + active tasks. Hits /status (not the bare team row): the plain team endpoint carries no member or task fields, so callers asking "what is this team doing" got a row with nothing actionable in it. Default response is a COMPACT projection (view="compact" + hint - trimmed, NOT missing fields). The upstream summary embeds the entire roster and every active task as full rows, which measured 170,331 chars on a real 173-member workflow team and 69,660 on a 51-member session team - both past the MCP result ceiling, i.e. the tool simply did not work on the teams that most needed it. Members and tasks are projected here, offline members fold into a count plus digest, and the API route and Dashboard JSON are untouched. |
| team_listA | List teams — active ones by default, newest first. Default response is a COMPACT projection (view="compact" + hint - trimmed, NOT missing fields): each row keeps id / name / status / kind / project_id / created_at. The unfiltered full-row list measured 148,173 chars across 316 teams on the real install, past the MCP result ceiling; teams accumulate one row per Workflow run and per CC session, so the list only ever grows. |
| team_briefingA | Get a team panoramic briefing — understand full team status in one call. Returns team info, member status, recent events, recent meetings, pending tasks, and action suggestions. Default response is a COMPACT projection (view="compact" + hint - trimmed, NOT missing fields): the roster follows the same live-first / offline-digest split as agent_list, event payloads collapse to a one-line derived summary, and pending tasks use the task-wall row projection. Measured 20,521 chars on a 173-member workflow team before projection. |
| team_closeA | Close (complete) a team — sets team status to completed and marks all busy agents as offline. Use this when the team's mission is fully done. Members are not deleted, but their status is set to offline automatically. team_id is REQUIRED — closing a team is not reversible from the tool面, so it never falls back to auto-resolving "the active team". |
| team_deleteA | Delete a team. team_id is REQUIRED — never auto-resolved. |
| agent_update_statusB | Update an Agent's running status. |
| agent_listA | List a team's members - live roster first, offline history on request. Default response is a COMPACT projection (view="compact" + hint - it is a trimmed view, NOT missing fields). Each member row keeps id / name / role / status / an 80-char current_task excerpt / last_active_at; system_prompt, config, the context watermark and the token ledger are omitted and come back with fields="all". Offline members are folded into a count plus a short most-recent digest. An offline agent is a terminated process - it cannot be messaged and cannot be assigned work - and on the real 51-member session team those rows were 96.4% of the payload, which is what made this tool exceed the MCP result ceiling and fail outright. Nothing is deleted: the count is always reported and include_offline=True returns the full history. |
| agent_template_listA | List every Agent template CC can actually resolve. Scans all three template sources with CC's own precedence — project-level
Default response is a COMPACT projection (view="compact" + hint - trimmed,
NOT missing fields): the full listing measured 32,480 chars, half of it
because |
| agent_template_recommendA | Recommend Agent templates — and, for a known project type, a team shape. Two layers in one answer:
|
| agent_reuse_recommendA | Recommend whether to reuse an existing sub-agent for a follow-up task. For follow-up work (bug re-fix, deeper research, same-domain iteration), resuming a prior sub-agent preserves its accumulated context. This tool ranks prior sub-agents by same-domain match, reads their P1 context watermark, infers reachability, and recommends one of three actions: reuse (SendMessage resumes it) / slim_then_reuse (self-summarize then spawn fresh with the summary) / spawn_new. It only recommends; the Leader decides. Availability tiers: live (same session, reachable now) / resumable (same
session, offline but transcript fresh) / cross-session (another session,
needs claude --resume) / expired (past retention). Address candidates by
NAME — SendMessage(to=...) takes a teammate name and keeps working after
the agent completes; each candidate's resume_hint is a ready-to-run call
(with the required Default response is a COMPACT projection (view="compact" + hint — trimmed, NOT missing fields): decision signals and call keys kept, full rationale and watermark detail via fields="all". |
| fleet_dispatchA | Dispatch an operational instruction to another ship (CC session) in the fleet. The fleet down-channel drives an EXISTING idle session to run one turn via
headless Safety gate (enforced server-side, no subprocess spawns until it passes):
Get target_session_id from the fleet view / project summary (each ship's session_id). This tool RECOMMENDS nothing and DECIDES nothing strategic; it only relays an operational instruction to an idle ship. |
| agent_activity_queryA | Query Agent activity records for a team. Returns recent activity log entries sorted by timestamp descending, including tool name, duration_ms, and an I/O summary. Default response is a COMPACT projection (view="compact" + hint - trimmed, NOT missing fields): input/output summaries are excerpted because the raw output_summary often holds a whole command transcript (a 60-row window measured 43.9k chars, right at the MCP result ceiling). Full records via fields="all". The compact window is capped at 50 rows - narrow with agent_id rather than widening limit. |
| meeting_createA | Create a team meeting and return a ready-to-use dispatch_plan for spawning participant Agents. Supports two participant formats:
|
| meeting_send_messageA | Send a discussion message in a meeting. Discussion rules:
SECURITY: Set caller_agent_id to the actual agent making this call. If it differs from agent_id, the message is flagged as impersonation in the audit log. Leader sending on behalf of others should set caller_agent_id='team-lead'. |
| meeting_read_messagesB | Read all discussion messages in a meeting. |
| meeting_concludeA | Conclude a meeting, marking it as completed. By default checks that all expected participants have spoken before concluding. Set force=True to override, but this will be recorded in the event log. |
| meeting_template_listA | List available meeting templates and their round structures. Returns: templates: All available templates with round structure details |
| meeting_listA | List meetings for a team, optionally filtered by status. |
| debate_startA | Start a structured 4-round debate meeting between an Advocate and a Critic. Debate structure:
|
| debate_code_reviewA | Start a debate-style code review for a specific file or change. Creates a structured 4-round debate where:
|
| meeting_updateA | Update meeting fields (topic, participants, notes). Use this to add conclusions/notes to a meeting or update its topic. To formally conclude a meeting (mark as concluded), use meeting_conclude instead. |
| meeting_attendance_checkA | Check which expected participants have spoken in the current round. Use this after spawning all Agents via dispatch_plan to verify attendance before advancing to the next round or concluding the meeting. |
| task_runA | Put a task on a team's wall. Nothing executes it — an Agent has to pick it up. The name is historical: there was once a worker pool that would "run" the task. That pool is retired; this tool only creates the row. Dispatch is yours to do (Agent(...) / SendMessage), and the sub-agent then writes progress back with task_memo_add. Priority and horizon drive the task wall's ordering, so set them here — the old docstring told callers to "set priority and horizon" while the signature had no such parameters, and any value passed was silently dropped (fixed 2026-07-27). |
| task_createA | Create a new task in a project (not bound to a team). Project-level tasks are attached directly to the project and visible on the project task wall. Suitable for planning-phase tasks not yet assigned to a team. |
| task_statusA | Query the current status of a task. |
| task_updateB | Update a task's fields (partial update — only provided fields are changed). |
| task_list_projectA | Get the task wall — project-scoped by default, team-scoped on request. This is the single task-wall entry point (the team-only Default response is a COMPACT projection (marked by view="compact" + hint — it is a trimmed view, NOT missing fields): each task row keeps id/title/priority/status/score/assigned_to/tags + 80-char desc excerpt (plus result/depends_on/subtask_count when present). Full details of a single task: task_status(task_id) / task_memo_read(task_id). |
| task_memo_readA | Read all memo records for a task — read before picking up a task to understand historical progress. |
| task_memo_addA | Add a memo record to a task — for tracking progress, recording decisions, marking issues. |
| task_execution_traceA | Get a task's execution timeline — plain, or with checkpoints + stats. The separate |
| project_createA | Create a new project with a default Phase automatically created. ⚠️ IMPORTANT: Projects are automatically registered by the OS when a CC session starts. You should NOT manually create projects unless the auto-registered project is missing. The root_path MUST match the current CC session's working directory — do NOT create projects pointing to other directories. |
| project_listA | List all projects in the system. Returns: projects: List of all projects with id, name, description, root_path, etc. |
| project_updateB | Update a project's name, description, or root_path. |
| project_deleteC | Delete a project. |
| project_summaryB | Get a quick project summary: status (active/inactive), teams, top tasks. |
| dismiss_project_registrationA | Mark current cwd as dismissed for project registration — won't ask again. |
| decision_logB | Query team decision log — task assignments, approach selections, Agent scheduling decisions. |
| prompt_effectivenessA | Return effectiveness statistics for Agent templates. Aggregates activity records to compute success rate, average duration, and top failure reasons per template. Also shows how many failure alchemy lessons are associated with each template. Use this to identify which Agent templates perform well and which need prompt improvement. |
| usage_attributionA | Report token usage together with how much of it can actually be accounted for. Read-only. Every token number comes back alongside its denominator (dispatches_total) and its metric label, because a token count without those two is meaningless: this repo carries two orthogonal metrics that measure 5-25x apart, and sub-agent usage coverage is currently far below 100%. There is deliberately no total field — 95.6% of the four layers is cache_read, so a lone total is just a cache-read count in disguise. |
| link_query | Query cross-domain reference edges for an object (who references it / what it references). Edges are extracted automatically (zero-LLM regex) from task memos and reports: wf_ runs, commit hashes, task UUIDs, [[memory]] links. |
| link_traceA | Trace the reference neighborhood of an object (undirected fanout, depth <= 2). Answers questions like "which tasks/reports touched commit 9d8f020" or "what work is connected to run wf_cbad7348". |
| unified_searchA | Search across all OS knowledge: task memos, reports, and tasks. Three-arm RRF fusion (k=60): BM25 full-text (Chinese bigram native), knowledge-graph fanout (queries containing wf_/commit/uuid IDs pull in everything linked to them), and exact ID-prefix / title match. Use this to recall past work: "归属铁律怎么修的", "wf_d01f207f", "stderr 盲区", commit hashes, etc. |
| report_saveA | Save a research/analysis report to the database. Reports are stored in the database with project isolation — no filesystem permission needed. Reports appear on the Dashboard reports page automatically. |
| report_listA | List saved reports, optionally filtered by author, topic, or type. Returns reports for the current project context, sorted newest-first. |
| report_readB | Read the full content of a saved report by ID. |
| briefing_addA | Add a decision item to Leader Briefing for user review. Use when Leader encounters decisions that require user input: project direction, architecture choices, budget/resource allocation. Anything a sub-agent's completion report leaves "for the user to decide" belongs here — a decision parked in report prose is a decision the user never actually received. |
| briefing_listA | List Leader Briefing items. Default shows pending items for user review. Each item carries project_id and tags, so a long decision queue can be narrowed to one project and/or one topic. |
| briefing_resolveB | Resolve a Leader Briefing item with user's decision. |
| briefing_dismissB | Dismiss a Leader Briefing item (no action needed). |
| failure_analysisA | Analyze failed tasks, distill defense rules + training cases + improvement proposals (failure alchemy). When a task permanently fails (exceeds retry limit), call this tool for deep failure analysis. Automatically generates three learning artifacts saved to team memory:
|
| diagnose_task_failureA | Auto-diagnose why a task failed and suggest fixes. Reads the task's execution trace (memos) to identify the failure point, compares with similar successful tasks in the same team, and returns actionable fix suggestions. Use this when a task fails or gets stuck to quickly understand root cause without manually reading through all memo records. |
| memory_searchC | Search the memory store in AI Team OS. |
| memory_addA | Add a direction-layer memory — the team's shared, cross-task standing preferences. 方向层 = 低频·高价值密度·跨任务长寿命的偏好/纠正/约束/设计意图。每个派出 的 agent 出生即注入方向层,"全中文""完成即汇报"这类偏好不再靠手抄进 prompt。 写入检验(软门槛):这条能影响多少未来任务?只影响单个任务的 → 去 task_memo_add(情景层),不要写这里。 体量红线是单一轴:存储上限 = 注入预算。方向层按桶计字符配额—— global 1200 字 + 每个 project 1500 字 + user 300 字,一个会话实际继承 3000 字;单条仍 ≤ 400 字。存得下的一定传得到,写不进去的就是真的没位置: 超限时本工具返回该桶全部有效条目(id / kind / 字数 / 全文)+ 用量缺口, 要求当轮先 memory_invalidate(可用 content_match 子串定位)或 memory_reconcile_apply 腾出空间,再重试本次写入。 超长内容改写成「触发条件 + 指向权威文件」的指针条目(如 "涉及生产/集群/DB 时遵守只读铁律,详见 ~/.claude/CLAUDE.md"),正文外置。 写入侧安全扫描:方向层条目会进每个派出 agent 的 system prompt,因此不可见 Unicode、提示注入句式(覆盖既有指令 / 套取系统提示 / 伪造对话角色)、凭据 形态一律拒绝入库。 kind 四类(决定注入截断优先级 constraint>design>directive>preference):
|
| memory_invalidateA | Invalidate a direction-layer memory — mark it invalid without deleting. 方向层偏好过时/被推翻时显式失效(Zep 失效语义:置 invalid_at 不删除, 保留可审计轨迹)。失效后不再进注入,也默认不出现在 memory_list。 两种定位方式,二选一:memory_id 精确定位,或 content_match 子串定位 (手里只有原文时免去先查一次 id——被配额顶回来的那一刻正是这种处境)。 子串必须唯一命中当前上下文的有效条目:命中 0 条或多条一律不动数据,多条时 返回候选让你给出更精确的子串。 |
| memory_listA | List direction-layer memories — valid entries by default, grouped by kind. 返回当前上下文的方向层条目:global + user 全局条目 + 当前项目的 project 级条目,按 kind 优先级(constraint>design>directive>preference)+ 时间倒序。 这是双 hook 常驻注入的同一数据源;用它审阅"派出的 agent 会继承什么"。 |
| memory_reconcile_candidatesA | 按需整理·粗筛:返回情景层候选组 + 方向层清单 + 蒸馏素材 + 操作说明。 记忆整理 = 会话内按需显式动作(CC 非常驻,无后台整理进程)。本工具只做 确定性粗筛(零 LLM)——OS 无独立 LLM 凭据,判定由你(调用工具的会话内 agent)完成,工具只负责候选粗筛与操作应用("agent 算、工具存")。 返回四块(project_id 自动按当前上下文解析):
判完后把确认的操作交给 memory_reconcile_apply 批量应用。 |
| memory_reconcile_applyA | 按需整理·应用:批量执行 LLM 精判确认后的操作(确定性,幂等)。 每条操作是一个 dict,按 op 字段分派(未知/缺字段返回 error,不阻断其余):
幂等:对已失效条目重复 invalidate/merge 返回 noop 不报错。应用后自动刷新 项目 last_reconcile_at(量阈软提示的基线)。 |
| context_resolveA | Get the current active OS context — active project, active teams, member list. This is the infrastructure for all simplified operations. A single call returns the complete context of the current working environment, allowing Leader or other tools to auto-fill parameters like project_id, team_id, etc.
Returns: Context dict containing project / team / teams / agents |
| os_health_checkA | Check the health status of the AI Team OS API service. Verifies the API service is running normally by accessing the team list endpoint, and reports one line of token-attribution coverage alongside it. Returns: Health status info including API reachability, team count, and a usage-coverage summary (measured / dispatched per path, plus the narrowest link in the attribution chain) |
| os_restart_apiA | Restart the AI Team OS FastAPI process safely (standardized restart flow). Use this after backend code changes to pick up the new version without manually killing processes. The flow has three safety guards:
If the API is already down, steps 2-4 are skipped and this becomes a plain "start" of the API on its configured port. |
| event_listA | List recent events in the system, optionally filtered. All four filters were already implemented server-side; the tool just never exposed them, so every call had to pull the global firehose and eyeball it (fixed 2026-07-27). Default response is a COMPACT projection (marked by view="compact" + hint — it is a trimmed view, NOT missing fields): each row keeps id/type/source/ts plus a one-line summary derived from the event payload. Use fields="all" for full payloads. |
| find_skillA | Find ecosystem skills/plugins using a 3-layer progressive loading system. Layer 1 (quick recommend): Describe your task and get top 3-5 matching skills with one-line descriptions and install commands. Layer 2 (category browse): Browse all skills grouped by category (memory / code-quality / frontend / security / dev-workflow / integration / etc.). Layer 3 (full detail): Get complete documentation for a single skill including features, OS complement relationship, and variants. The |
| model_config_getA | Get model governance state: available models (auto-discovered from local CC transcripts — the models you actually used), the current default startup model (~/.claude/settings.json "model" key), and per-model workflow agent usage over the last N days (orchestration charter observability: how much fable vs opus the fleet burned). |
| model_config_setA | Set the default startup model for new CC sessions (writes the "model" key in ~/.claude/settings.json; empty string removes the key, restoring CC's own default). Takes effect on NEW sessions. |
| channel_sendA | Send a message to a channel. Supports cross-team broadcasting and @mention semantics. Channel formats:
|
| channel_readA | Read messages from a channel. Supports incremental pull via 'since' parameter to fetch only new messages. |
| channel_mentionsA | Get channel messages that @mention a specific agent. |
| verify_completionA | Verify whether a task is truly complete. Checks:
Use this after an agent reports completion to ensure all artifacts are present. |
| ecosystem_scanA | Scan popular Claude ecosystem repos (>=min_stars) and update ecosystem_repo_profiles. Runs 8-10 gh search queries covering:
Deduplicates + filters >=min_stars + excludes known repos (CronusL-1141/AI-company etc.) Sets needs_deep_review=True for stars < 15000. relevance_category is auto-classified heuristically (based on topics + description keywords). |
| ecosystem_searchA | Query ecosystem_repo_profiles archive (Stage E enhanced). Default response is a COMPACT projection (marked by view="compact" + hint — it is a trimmed view, NOT missing fields): each profile row keeps repo/stars/lang/status + summary. Full profile of a single repo: ecosystem_repo_get(repo_full_name); full rows here: fields="all". |
| ecosystem_repo_getC | Get holistic detail of an ecosystem repo (profile + tags + deep_reviews + relations + scan_run). |
| ecosystem_search_by_capabilityA | Search ecosystem repos by capability tags (reverse lookup from tag → repo). |
| ecosystem_scan_periodicA | Run an incremental or full ecosystem scan via the scanner service. Compared to ecosystem_scan, this tool:
|
| ecosystem_refresh | On-demand incremental refresh of the project's active ecosystem set. Replaces the retired weekly cron (2026-07-10 decision: CC is not always-on, so long-running timers are pointless — refresh happens when the user asks for it). For each active-set repo (top_n by stars) this probes GitHub once, writes a status snapshot, and re-queues a Stage 0 shallow summary only when the repo has new pushes; 404/403 mark the profile deleted/private. The response's |
| ecosystem_scan_statusB | Fetch a single EcosystemScanRun by id. |
| ecosystem_scan_historyA | List recent scan runs ordered by started_at descending. |
| ecosystem_deep_review_requestA | Queue a deep-review for a repo and return the dispatch prompt. Creates an EcosystemDeepReview row queued on the funnel
(
|
| ecosystem_deep_review_statusC | Look up the most recent deep-review for |
| ecosystem_deep_review_listA | List deep-reviews newest-first, optionally filtered by status. |
| ecosystem_deep_review_cancelA | Cancel an in-flight (stage_status='queued') deep-review. Advances the row's |
| ecosystem_tag_list | List ecosystem tag dictionary entries. Three layers of tagging are supported:
This tool only returns the canonical tag dictionary (21 default tags). Use ecosystem_tag_apply_batch to actually apply tags to repos. |
| ecosystem_tag_apply_batchA | Apply Layer 1 + Layer 2 auto-tagging to a batch of ecosystem repos. Layer 1 matches GitHub topics directly (confidence=0.95, source=github_topic). Layer 2 matches keyword rules against name+description+topics+owner (confidence=0.7, source=auto_rule). Repos with fewer than 2 matched tags are flagged via needs_llm=True; callers should pass those into ecosystem_tag_dispatch_llm to spawn Layer 3 sub-agents. If both repo_ids and repo_full_names are empty, the first repos in the database are processed. |
| ecosystem_tag_dispatch_llmA | Build a Layer 3 sub-agent dispatch plan for repos that need LLM fallback. Returns a dispatch plan; the Leader is expected to spawn each sub-agent via the Agent tool using launch_call.params. Each sub-agent analyzes the repo and submits results via ecosystem_tag_apply_llm_result. Concurrency is capped at max_concurrency (default 20) to limit token spend. Excess repos are returned in skipped_due_to_limit. |
| ecosystem_tag_apply_llm_resultB | Submit Layer 3 LLM tagging result from a sub-agent. |
| ecosystem_repo_tagsA | List all tags currently associated with a single ecosystem repo. Returns each association with its confidence, source layer (github_topic / auto_rule / auto_llm / manual), and tag metadata. |
| ecosystem_summary_weeklyA | Generate the past-N-days ecosystem briefing as markdown. Aggregates new / updated profiles, completed deep-reviews, archive
counters and top star movers over the configured window. When
|
| ecosystem_summary_by_tagA | List every repo carrying Each row contains stars / language / one-line summary plus a deep-
review id when one exists. Rows are sorted by stars desc.
Archived repos are excluded unless |
| ecosystem_summary_top_nB | Top-N markdown table of ecosystem repos. |
| ecosystem_summary_healthC | Platform self-check markdown: profile / scan / tag coverage / archive ratio. |
| ecosystem_apply_shallow_summaryA | Stage 0 worker callback: write back a shallow summary OR report a failure. Success path (default): pass shallow_summary (200-400 char Chinese
markdown) and deep_review_id; the OS will persist the summary,
advance Failure path: leave shallow_summary empty and pass error_kind,
which routes the failure through the §3.1 classifier so the OS
can decide whether to immediate-retry, mark deleted/private, or
feed the self-learning loop. Valid error_kind values:
|
| ecosystem_shallow_queue_statusA | Show Stage 0 shallow-scan queue status for the active project. Returns counts for active profiles, pending shallow scans,
in-flight dispatches, terminal failures (shallow_failed), and
deleted/private-flagged repos. The Returns:
|
| ecosystem_deep_review_request_batchA | Stage 1 — Queue architecture-analysis dispatches for tag-filtered candidates. Pulls active+shallow_done profiles whose tag set covers |
| ecosystem_apply_architecture_mdA | Stage 1 writeback — submit architecture_md OR report failure. Success path (default): pass non-empty architecture_md (800-1500 字
Chinese markdown). The OS persists it, advances Failure path: leave architecture_md empty and pass error_message;
the OS advances |
| ecosystem_trigger_debateA | Stage 2 — Build debate dispatch payload (Leader still calls debate_start). Validates that each |
| ecosystem_link_debate_meetingA | Stage 2 helper — link Called immediately after |
| ecosystem_apply_debate_resultA | Stage 2 writeback — submit debate conclusion to advance to At least one of risks_md / learnings_md / integration_md must be
non-empty. |
| ecosystem_mark_as_referenceA | Stage 3 reference path — add Use when the debate concludes that the repo is worth keeping as an architectural reference but not integrated. The repo will appear highlighted in future searches as "已研究过" so the team avoids re-deep-scanning it. |
| ecosystem_start_integrationA | Stage 3 integrate path — build a task_create payload + tag the repo. Adds ecosystem 不接管实施 — task ownership 由现有任务/团队系统接管。 |
| ecosystem_link_integration_taskC | Stage 3 helper — link integration task id back to review row. |
| ecosystem_claim_shallowA | Claim the next queued repo for shallow scanning (stage_status='queued'). Atomic: only one worker gets each row; others get {"claimed": false}. v1.7.0: also returns repo_full_name, topics, description, owner, stars, last_commit_at so workers can skip a separate ecosystem_repo_get call. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CronusL-1141/AI-company'
If you have feedback or need assistance with the MCP directory API, please join our Discord server