Skip to main content
Glama

Agent Orchestrator

Agent Orchestrator is a window on your computer. You chat with models that already run here or on a box you started. Other apps (like Late) can use it as MCP.

Writes wait for Approve. Keys stay on this computer. Bind is loopback (127.0.0.1) unless you type one private IP on this computer.

How it works

  1. You start it on this computer (npm run gui, or the app from Releases).

  2. You open the local page it prints. That URL is only for this machine.

  3. You type in Chat. Auto picks who speaks. Implement/install still waits for Approve.

  4. If you want Late (or another client) to use this as the agent, click Copy MCP URL. It is /mcp on the same port as the web UI, not always 8787. The HTML page is not MCP.

That is the whole idea.

How Agent Orchestrator works on your computer

Chat on this computer, then Copy MCP URL for Late. The address is the host this process bound (loopback, or the private IP you typed) on the port it printed.

Chat (GUI or MCP)
  → Auto router (control tools | single agent | multi-agent debate)
      → Cursor (local or cloud) — can edit allowlisted directories
      → External models — text only
      → Local model server on 127.0.0.1 — never public

Related MCP server: Cloud Agent MCP Server

Watch it

Watch how Agent Orchestrator works

This clip is Debate on your computer: local Gemma, Cursor local, and Cursor cloud each get a turn. Gemini returned 429 and was skipped. You read the replies. Writes still wait for Approve.

What’s in the archive

Ollama and llama-server are in the zip/tarball. Weights are not. vLLM Start still needs Docker. Bind stays 127.0.0.1. This app does not start inference on another host.

What you get

Picture

What is packed

Archive includes Node, Ollama, llama-server; Mac is darwin zip

Start / Stop on Local models

Start Ollama, Start llama-server, vLLM Start with Docker

GUI vs /mcp

Paste /mcp into Late, not the HTML token URL

Four steps

1

2

3

4

Extract

Start Ollama

vLLM Docker

Late /mcp

sequenceDiagram
  actor You
  participant GUI as GUI 127.0.0.1
  participant Ollama as Ollama :11434
  participant Late
  You->>GUI: extract archive → agent-orchestrator-gui
  You->>GUI: Local models → Start Ollama
  GUI->>Ollama: serve on loopback
  You->>Late: paste printed /mcp URL
  Late->>GUI: chat_send (isolated prompt)
  Note over GUI,Late: extra start_vllm / dispatch wait for Approve
  Note over GUI: no start_ollama MCP tool

Install

Download a portable build from Releases (tag v0.1.4). GitHub Actions Build installers also packs on main (workflow artifacts). Filenames are in release/README.md. Each archive includes Node 22. Extract it, then:

Your computer

File

What you do

Linux

agent-orchestrator-…-linux-….tar.gz

Extract, run ./bin/agent-orchestrator-gui. Same tarball on Debian, Fedora, Arch (no .deb / .rpm).

Mac (Apple silicon)

agent-orchestrator-…-darwin-arm64.zip

Extract, run ./bin/agent-orchestrator-gui. Unsigned zip — not mac-….tar.gz. Metal/MLX in this pack.

Mac (Intel)

agent-orchestrator-…-darwin-x64.zip

Same. llama.cpp is CPU/BLAS.

Windows

agent-orchestrator-…-win-x64.zip

Extract, run bin\agent-orchestrator-gui.cmd

That starts the GUI and Streamable HTTP /mcp on the same port. Copy the printed URL for Late. Stop with --stop. Bind stays 127.0.0.1 unless you set one private IP (see below). Ollama and llama.cpp are in the archive (Start on the Local models page). vLLM Start still needs Docker — if Docker is missing, Start with Docker stays hidden.

The Linux file is a portable tarball — it is not tied to one distro. There is no .deb or .rpm (this project packs a Node runtime archive, not an fpm/electron-builder installer).

Or install from source below.

Quick start

Requires Node.js 22.13+.

npm install
cp .env.example .env

Put API keys in .env or in the GUI Backends page — never in agents.config.yaml. apiKeyEnv is the variable name (GEMINI_API_KEY), not the secret.

# GUI (loopback, or one private IP — see Late on another computer)
npm run gui

Open the token URL from stderr (http://127.0.0.1:<gui-port>?token=… on loopback, or the private IP you typed). The session token is stored at .orchestrator/gui.secret (gitignored). The GUI also serves Streamable HTTP at /mcp on that same port (no GUI token — Late never sends it). Copy that exact URL from stderr or GUI Settings → Copy MCP URL — it is the host and port this process bound, not always 8787. On listen it writes .orchestrator/mcp.gui.url (and last-writer mcp.url) plus ~/.config/agent-orchestrator/ (or $XDG_CONFIG_HOME) so a client like Late can find a non-default port. Dedicated npm run mcp:http writes mcp.http.url separately so it does not hide the GUI URL.

Late uses only the printed Streamable HTTP /mcp URL (same port as the GUI, or npm run mcp:http). Do not put this program in Cursor mcpServers for Late — that skips Late Approve and must not receive API keys. npm start / .cursor/mcp.json is stdio for this repo’s Cursor IDE, not the Late operator path.

Copy the /mcp URL — the HTML page is not MCP

The HTML root is the GUI. /mcp on that same port is Streamable HTTP (a JSON body, not the chat page). Paste the printed /mcp URL into Late.

Windows

Same Node 22.13+ and npm commands work in PowerShell or cmd. Loopback bind is the default (127.0.0.1). One private IP is optional (see below).

npm install
copy .env.example .env
npm run gui

Open the token URL from stderr. Stop with npm run gui:stop. Late still uses the printed /mcp URL. npm start is stdio for this checkout’s Cursor IDE only (node + tsx/dist/cli.mjs, not a Unix .bin shim) — not the Late operator path.

Local models on your computer talk to 127.0.0.1:

  • Ollama — packed installs include runtime/bin/ollama. Start it from Local models, or use one you already run (%LOCALAPPDATA%\Programs\Ollama\ollama.exe).

  • llama.cpp — packed installs include llama-server (Vulkan/Metal; Intel Mac is CPU/BLAS). Start with --host 127.0.0.1 and a GGUF path. Weights are not in the archive.

  • vLLM — Windows CUDA wheel when you have NVIDIA + nvidia-smi; host vllm / python -m vllm. AMD: ROCm tools (amd-smi) when present.

  • Docker Desktop — optional for vLLM. NVIDIA GPU in Docker Desktop can work when GPU support is enabled. Intel XPU / /dev/dri images are a Linux path; on Windows use WSL2 or a Linux host, or skip Intel Docker. If Docker is missing, vLLM Start-with-Docker stays hidden.

Hardware detect uses nvidia-smi (including C:\Windows\System32 / NVIDIA NVSMI), Win32 video controllers, and vendor CLIs when present — not Linux lspci / sysfs. If probes fail, the GUI shows a reason instead of crashing.

State stays in .orchestrator under the repo (or AGENT_ORCHESTRATOR_STATE_DIR). Write-allowlist paths may use drive letters (C:\Users\…). POSIX 0600/0700 bits do not apply on NTFS; use folder ACLs if the machine is shared.

Command

Purpose

npm run gui

Control plane on loopback GUI port (AGENT_ORCHESTRATOR_GUI_PORT, default 8787: web UI + /mcp)

npm run gui:stop

Stop that process

npm run gui:restart

Stop then start

npm start

Stdio MCP server

npm run mcp:http

Dedicated Streamable HTTP MCP (AGENT_ORCHESTRATOR_MCP_PORT, default 8790 /mcp)

Late Settings is optional. Paste the printed /mcp URL, or leave Late’s address empty and let it read the advertised file. That URL uses the port this process actually bound — not a hardcoded 8787. /MCP is the same route. Late will not start this process and works with MCP off.

If the GUI port is already in use, the GUI is already running — use gui:stop or open the existing token URL. Stopping a local model container does not stop the GUI.

This checkout’s .cursor/mcp.json is Cursor IDE for developing this repo, not the Late operator path. It does not pass API keys. Late pastes the printed /mcp URL and keeps Approve. list_agents re-reads env and GUI secrets without a full IDE restart.

Chat

Home is a chat thread. The header (new chat, thread switcher, settings) and composer stay on screen; only messages scroll.

  • Auto (default) — control tools for hardware/download/start; debate for plan/fix/review when two or more backends are ready, and whenever two or more local servers (vLLM, Ollama, llama.cpp) are running; otherwise a single agent.

  • Debate — round-table: each ready model speaks in turn (one bubble per speaker), then a closer synthesizes.

  • Single / pin a backend — that backend only.

While a speaker runs, a thinking chip shows name, elapsed time, and phase so the UI does not look hung.

On your computer (short how-tos)

Do this

How

Picture

Start / Stop local servers

Settings → Local models. Start Ollama / Stop, or Start llama-server with an absolute .gguf path. Loopback only. Weights are not in the archive.

Start Ollama and llama-server

vLLM

Start with Docker only if Docker is on this computer. Hidden when Docker is missing. Ollama / llama.cpp still work.

Search the catalog

MCP for Late

Copy MCP URL → paste /mcp into Late. HTML root is not MCP. Empty Late URL = folder. Send is chat_send. Extra start_* wait for Approve. Do not put this in Cursor mcpServers.

Copy the /mcp URL

Token-gated /api

Open the printed ?token= URL. GUI /api/* needs that session token. /mcp does not (Late never sends it). On a private-IP bind, /mcp is trusted LAN — firewall to the laptop.

GUI on loopback only

MCP tools

chat_send, list_agents, start_vllm, ollama_status, llamacpp_status, … There is no start_ollama tool — Start Ollama is the Local models button.

GUI vs /mcp

Debate: several models each get a turn

This clip is Debate on your computer: paste a prompt (do not drip-type). Local Gemma, Cursor local, and Cursor cloud each spoke. Gemini returned 429 and was skipped. Writes still wait for Approve.

Delete a chat

Delete next to a thread removes that chat. It cannot be undone.

Writes and installs wait for Approve. Implement/install stays plan-only until you click Approve on the pending-actions card. After that, Cursor may write only inside the write allowlist. If Cursor is missing, Approve still writes with Node apply-patch in that granted folder. Host-wide installs (package managers, game engines, sudo) are called out and still wait. External models never edit files.

Approve before a write

Grant a folder that already exists on this computer, then Approve. This capture created notes.txt (not .env) with Cursor local. The file still lands only inside the granted path.

Settings

Page

What it does

Backends

Ready/not-ready, paste keys (masked), Gemini model id, nicknames, custom logos, Listen host (loopback or one private IP) + Copy MCP URL

Local models

Detect GPU VRAM, recommend weights that fit, download, start/stop/remove local servers. Hugging Face token (gated Gemma/Llama/Mistral): paste a Hub read token; status is configured/not; value is never returned

Allowlist

Directories Cursor may write to

Updates

Check GitHub for this app and Late. Ask before download. Cloud AI is not required.

Config

Edit agents.config.yaml (validated; no live keys)

Run workflow

Optional named pipelines

Theme

Appearance for this browser. Stored in localStorage (orchestrator.gui.theme), not in git.

Ready backends on this computer

Ready vs not-ready. Keys stay masked. Nicknames and logos are optional. Reload env picks up a key added after start.

Check for updates on your computer

Updates: Check for updates asks GitHub for Late and this app. Then pick Update Late, Update Orchestrator, or Update both. Nothing downloads until you confirm Download on your computer? Cloud AI is not required.

Keys live in .env and .orchestrator/secrets.env (gitignored). On POSIX the orchestrator creates secret/state files as mode 0600 and directories as 0700, then chmods again after overwrite (Node’s mode option only applies when creating a new file). Windows does not honor Unix permission bits — Node can only toggle the read-only flag, not user vs group vs others. If other accounts use the machine, restrict the repo folder with NTFS ACLs (your user only). Reload env picks up a key added after start.

Cursor (cursor-local and cursor-cloud) uses the env name CURSOR_API_KEY. Paste it in GUI Settings → Backends, or set it in .orchestrator/secrets.env / .env. Get a key from Cursor Dashboard → Integrations. Never commit the value. If it is missing, chat shows Cursor not configured (one line, no stack). Local Cursor uses the MCP process working directory when that path is on the write allowlist — not a hardcoded home path.

Nicknames are stored on each backend in agents.config.yaml (nickname: Arc Qwen). Custom logos are PNG/JPEG/WebP files under .orchestrator/logos/ (gitignored, 512 KiB max; SVG/HTML rejected by magic bytes). Chat bubbles and Settings use the nickname and logo when set.

The GUI Theme picker (sidebar, Chat → Settings, and Overview) is per browser/profile so people sharing a machine can keep their own look. It is not stored in git.

Theme on this browser

Security

Property

Behavior

Bind

GUI and HTTP MCP default to 127.0.0.1. You may bind one private IP on this computer (RFC1918 or IPv6 ULA) via mcp.listen_host, GUI Settings, or AGENT_ORCHESTRATOR_MCP_HOST / AGENT_ORCHESTRATOR_GUI_HOST. auto (or Settings empty) is this computer's primary RFC1918 IPv4. Ports from AGENT_ORCHESTRATOR_GUI_PORT / AGENT_ORCHESTRATOR_MCP_PORT (defaults 8787 / 8790). 0.0.0.0, ::, and public addresses are refused. Local model HTTP stays loopback.

Auth

GUI /api/* requires the session token. Streamable HTTP /mcp does not (Late never sends it). Host + Origin are the boundary (loopback and the bound private host). Pairing a token on /mcp would break Late unless Late starts sending one. On a private-IP bind, treat /mcp as trusted LAN — firewall to the laptop. Do not tunnel /mcp to the public internet. Late Approve is Late’s sidecar when Late is the client.

GUI token

Open the printed ?token= URL. The token is stored in sessionStorage and stripped from the address bar. EventSource /api/events still uses a query token because the browser cannot set Authorization on EventSource. Logo URLs use the same query form.

Origin

Host must be loopback or the bound private IP. GUI /api Origin must match this port. Streamable HTTP /mcp allows loopback Origin, the bound private host, or none (Late sidecar). Random websites (evil.com) are rejected.

Secrets

Never logged or shown in full. Not committed. POSIX files 0600; Windows needs NTFS ACLs.

Writes

Realpath + allowlist; .. and symlink escapes fail.

Do not tunnel the GUI or vLLM. Cloud Cursor agents cannot reach localhost; the orchestrator passes text between local and cloud.

GUI on loopback only

The rail shows the bind address. Local vLLM stays loopback. This page is for your computer (and, if you choose, one private IP on a trusted LAN).

Write allowlist

Default: this workspace (WORKSPACE_CWD / workspace.cwd). Add more via Settings → Allowlist or add_allowed_dir. Chat offers one-click add when you name an absolute path that is not listed. Drag a folder onto Chat (or paste a path). The path must already exist on this computer (the one running the GUI).

Grant a folder on this computer

Local models (vendor-agnostic)

list_hardware probes whatever accelerators are present (NVIDIA CUDA, AMD ROCm, Intel XPU, or CPU if none). Recommendations use measured VRAM, not a single vendor. Missing NVIDIA is not treated as “CPU only” when another GPU exists.

Search the local models catalog

Search the catalog by name (this clip types gemma). Recommended rows say whether a snapshot fits this computer.

A catalog model fits a single GPU when estimated weights plus ~20% KV-cache headroom are ≤ that GPU’s VRAM. start_vllm uses every GPU on this computer by default (vllm serve --tensor-parallel-size N). Pass use_all_gpus=false to stay on one card. A larger model can still fit via tensor parallel when weight shards fit in combined VRAM. Remaining memory on each card is used for the KV cache (--gpu-memory-utilization 0.9). The catalog is not tied to one vendor: it includes Qwen 2.5/3/3.5/3.8, Gemma 2 and Gemma 4 Instruct, Llama 3.1/3.3/4 Scout, Mistral 7B and Small 3.2, Phi-4, OLMo 2/3, IBM Granite 3.3/4.2, and DeepSeek-R1 Qwen distills. Recommendations list every catalog snapshot (no top-8 cap) with fit flags for this computer (fits / needs tensor parallel / too big). Newest Hub id is marked when a family has several names (Gemma 4 over Gemma 2/3, Qwen3.8 over Qwen2.5). Older generations stay downloadable. FP16 rows work on CUDA, ROCm, and Intel XPU; AWQ/GPTQ rows are CUDA/ROCm only. Official Gemma 2 (Gemma Terms of Use) and Llama (Llama Community License / Llama 4 Community License) Hugging Face repos are gated. Gemma 4 Instruct is ungated Apache-2.0. Community Llama AWQ snapshots in the catalog are ungated on Hugging Face but still under the Llama Community License. You can still download any other org/name snapshot that vLLM can load.

Download snapshots into .orchestrator/models (gitignored, must stay on the allowlist).

Gated Hugging Face models (Gemma, Llama, Mistral, and similar Hub gates):

  1. While logged into your Hugging Face account, open the model card and accept the license / access terms (Gemma 2: Gemma Terms of Use; Llama 4: Llama 4 Community License).

  2. Create a read access token at huggingface.co/settings/tokens. Paste it in the GUI: Settings → Local models → Hugging Face token (stored as HF_TOKEN in gitignored .orchestrator/secrets.env). HUGGING_FACE_HUB_TOKEN in env or that same secrets file is also honored. Do not put the token in agents.config.yaml or git.

  3. The GUI never returns the raw token (status is configured / not configured). Clear or paste a new token to rotate. POSIX file mode is 0600; on Windows use NTFS ACLs if the machine is shared.

The download helper uses that stored token. If it is missing, a 401 from a gated repo still tells you to set HF_TOKEN in the GUI or env — never commit it.

start_vllm picks a serving stack from the detected backend:

  • CUDA — host vllm serve when the CUDA wheel is installed

  • ROCm — ROCm vLLM when present

  • XPU — vendor Docker images if they are already local; otherwise a host XPU build

  • CPU — not used as a serve path

The API is published on 127.0.0.1 only (ports 8000–8099). Start returns immediately (202); wait on the Local models page until /v1/models is healthy. The running server is registered as a backend automatically (dummy loopback token if the client requires Bearer — you do not copy a key from the container).

You can run several models at once. Each catalog id gets its own container, port, and backend (vllm-<catalog-slug>). Stop one instance; Remove from mix also drops that backend from YAML; Delete weights is a separate confirm.

pip install -r scripts/requirements-hf.txt   # downloads
# Then install the vLLM build that matches your GPU (CUDA, ROCm, or vendor XPU/Docker).

Ollama

Ollama is a local OpenAI-compat API (http://127.0.0.1:11434/v1). Packed installs include the binary. Start it from Local models → Start Ollama (loopback only). Pull weights yourself (ollama pull llama3.1) or from Late. Then Register Ollama backend.

YAML type is ollama. Dummy apiKey: ollama is not a secret. Non-loopback hosts are refused.

llama.cpp

Packed installs include llama-server (Vulkan on Linux/Windows, Metal on Apple silicon; Intel Mac is CPU/BLAS from the official zip). GGUF files are not in the archive. Start from Local models with an absolute .gguf path, or:

llama-server -m /path/to/model.gguf --host 127.0.0.1 --port 8080
# Windows: llama-server.exe -m C:\path\to\model.gguf --host 127.0.0.1 --port 8080

Then Backends → Add llama.cpp backend with http://127.0.0.1:8080/v1. Bind 127.0.0.1 only.

YAML type is llamacpp.

Ready vLLM, Ollama, and llama.cpp backends all participate in Auto debate when two or more local servers are up. File writes still go through Cursor.

HTTP MCP (any client)

The GUI serves Streamable HTTP at http://<bind-host>:<gui-port>/mcp on the same process as the web UI (AGENT_ORCHESTRATOR_GUI_PORT, default 8787). A dedicated process is npm run mcp:httphttp://<bind-host>:<mcp-port>/mcp (AGENT_ORCHESTRATOR_MCP_PORT, default 8790). /MCP is the same route. Late does not send a GUI token. Copy the URL that process printed (or GUI Settings → Copy MCP URL). Late works with MCP off.

Late on another computer on your LAN

You start Orchestrator on this computer. Late only talks HTTP; it will not start this process. Cloud AI is not required for a private LAN address.

On the Orchestrator PC, pick one:

# Auto: this computer's primary RFC1918 IPv4 (here 192.168.2.139)
AGENT_ORCHESTRATOR_MCP_HOST=auto AGENT_ORCHESTRATOR_MCP_PORT=8790 npm run mcp:http

# Explicit IP
AGENT_ORCHESTRATOR_MCP_HOST=192.168.2.139 AGENT_ORCHESTRATOR_MCP_PORT=8790 npm run mcp:http

Bare npm run mcp:http stays 127.0.0.1 unless YAML mcp.listen_host is auto or an IP.

Or bind the GUI (same /mcp on the GUI port, default 8787):

AGENT_ORCHESTRATOR_GUI_HOST=auto npm run gui

Or type auto / leave empty / type 192.168.2.139 in GUI Settings → Backends → Listen host, save, and restart. That writes mcp.listen_host in agents.config.yaml. Env vars override the YAML field.

Late on the other computer: paste the printed URL, for example http://192.168.2.139:8790/mcp (dedicated MCP) or http://192.168.2.139:8787/mcp (GUI). The HTML page is not MCP.

Firewall: allow the laptop (example 192.168.3.116) to that host and port. If the two boxes are on different subnets (.2 vs .3) you need routing — if ping already works, you are fine. SSH is not required.

This is one private IP on your computer, not every interface. 0.0.0.0 and public addresses are refused. /mcp has no GUI token because Late never sends one — use a trusted LAN and the firewall.

Copy MCP URL vs the HTML root

Paste that /mcp URL. Opening the HTML page in a browser is the GUI, not MCP.

POST /mcp HTTP/1.1
Host: 192.168.2.139:8790
Accept: application/json, text/event-stream
Content-Type: application/json
MCP-Protocol-Version: 2025-03-26

(Loopback is Host: 127.0.0.1:<port>.)

Late: Settings → MCP is optional. If you turn it on, Address = the printed /mcp URL from this process (GUI Settings can copy it). Save, then Check. List/status tools run; starts and writes still wait for Approve. You start the GUI or npm run mcp:http; Late will not start it and still chats when MCP is off.

Stdio (tsx src/index.ts) is for this repo’s Cursor IDE only. Late still uses the printed /mcp URL.

Optional ClearPass / ISE / Active Directory

Off by default (AGENT_ORCHESTRATOR_MCP_AUTH=local-token). Passwords and RADIUS secrets go in .env or GUI Backends secrets (RADIUS_SECRET, LDAP_BIND_PASSWORD) — never agents.config.yaml.

LDAP/RADIUS verify the user, then /mcp/login returns a short-lived Bearer for /mcp. HTTP Basic username/password on /mcp also works when those plugins are on. If an allowlist is set, the AD memberOf / RADIUS Filter-Id must match or the result is 401.

LDAPS (Active Directory) — prefer ldaps:// (port 636). Plain ldap:// is refused.

AGENT_ORCHESTRATOR_MCP_AUTH=local-token,ldap
AGENT_ORCHESTRATOR_LDAP_URL=ldaps://dc.example.com:636
AGENT_ORCHESTRATOR_LDAP_BIND_DN=CN={username},CN=Users,DC=example,DC=com
AGENT_ORCHESTRATOR_LDAP_BASE_DN=DC=example,DC=com
AGENT_ORCHESTRATOR_LDAP_FILTER=(sAMAccountName={username})
AGENT_ORCHESTRATOR_LDAP_ALLOWED_GROUPS=CN=MCP Users,OU=Groups,DC=example,DC=com
# LDAP_BIND_PASSWORD in GUI secrets if you use a service bind DN

Windows and Linux: same env vars. Trust the DC certificate (or lab-only AGENT_ORCHESTRATOR_LDAP_TLS_REJECT_UNAUTHORIZED=0).

RADIUS (ClearPass and Cisco ISE) — Access-Request/Accept, PAP. Point the host at the NAD/RADIUS listener ClearPass or ISE already uses. Set a Filter-Id (or equivalent) on the accept profile and allowlist it here.

AGENT_ORCHESTRATOR_MCP_AUTH=local-token,radius
AGENT_ORCHESTRATOR_RADIUS_HOST=clearpass.example.com
AGENT_ORCHESTRATOR_RADIUS_PORT=1812
AGENT_ORCHESTRATOR_RADIUS_ALLOWED_FILTER_IDS=mcp-users
# RADIUS_SECRET in GUI secrets (writeSecureFile / POSIX 0600)

Login: not used by Late. HTTP MCP for Late is the printed /mcp URL with no GUI token.

MCP tools

Tool

Purpose

list_agents

Specialists, backends, allowlist, local runtime

chat_send / chat_approve / chat_list

Same router as the GUI

dispatch / follow_up / run_workflow

Named specialist or pipeline

get_run / list_runs

Async run status

list_allowed_dirs / add_allowed_dir / remove_allowed_dir

Write sandbox

list_hardware / list_local_models / recommend_local_models

Fit and catalog

download_local_model

Hugging Face snapshot

start_vllm / stop_vllm / remove_vllm / vllm_status / delete_local_model

Local vLLM servers

ollama_status / llamacpp_status

Probe loopback Ollama / llama-server. There is no start_ollama MCP tool — use Local models Start Ollama.

Default specialists

Specialists on this computer

Id

Typical backend

Role

planner

Anthropic

Implementation plan

builder

Cursor local

Writes code

reviewer

OpenAI

Review

pr-triage

Cursor local

Failing checks

gemini-planner

Gemini

Extra external planner

vllm-chat

Local vLLM

Text-only local model

ollama-chat

Local Ollama

Text-only; daemon on 127.0.0.1:11434

cloud-builder

Cursor cloud

Isolated cloud agent

Only Cursor backends edit files. Point backend at any id in agents.config.yaml.

Add a backend

backends:
  groq:
    type: openai
    baseUrl: https://api.groq.com/openai/v1
    model: llama-3.3-70b-versatile
    apiKeyEnv: GROQ_API_KEY

specialists:
  groq-reviewer:
    description: Fast external review
    backend: groq
    fallback: reviewer

Gemini uses Google’s OpenAI-compatible endpoint. Set one current model id (the GUI lists ids from Google when the key works). Do not put comments or pro / flash lists in model.

${ENV_NAME} in YAML expands from the process environment.

Cursor IDE only (not Late)

Do not add this to Cursor mcpServers when you use Late. Late’s path is the printed /mcp URL; Cursor mcpServers skips Late Approve and must not receive vault keys.

If you open this repo in Cursor to develop the orchestrator, stdio looks like:

{
  "mcpServers": {
    "agent-orchestrator": {
      "type": "stdio",
      "command": "node",
      "args": [
        "/absolute/path/to/this-repo/node_modules/tsx/dist/cli.mjs",
        "/absolute/path/to/this-repo/src/index.ts"
      ],
      "env": {
        "AGENT_ORCHESTRATOR_CONFIG": "/absolute/path/to/this-repo/agents.config.yaml",
        "WORKSPACE_CWD": "${workspaceFolder}"
      }
    }
  }
}

On Windows use the same node + tsx/dist/cli.mjs form with C:\… paths (or ${workspaceFolder} in Cursor). Do not point command at node_modules/.bin/tsx — that shim is a Unix shell script. Do not put CURSOR_API_KEY or other provider keys in this block.

Late: paste the printed /mcp URL in Late Settings. Leave Cursor mcpServers empty for that workflow.

What is not in git

.env, .orchestrator/ (GUI token, secrets, chats, logos, allowlist, model weights, vLLM state), gui.secret / secrets.env if copied to the repo root, node_modules/, and logs. See .gitignore.

Changes

What shipped in each tag: CHANGELOG.md.

Licenses

This repository is MIT. npm dependencies keep their own licenses under node_modules after npm install (including @cursor/sdk and @modelcontextprotocol/server). Model weights you download are not in this repo and remain under their upstream terms (Gemma Terms of Use, Llama Community License, Apache-2.0, MIT, and others as listed on each Hugging Face card).

Available Tools

24 tools
add_allowed_dirA

Grant a directory for local Cursor agent file writes. The path is resolved with realpath (symlink escapes are rejected) and must already exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute or relative directory path to allow

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It adds meaningful constraints: the path is resolved via realpath, symlink escapes are rejected, and the directory must already exist. This goes beyond a generic 'add' description and helps the agent predict failure conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The primary purpose is front-loaded, and the behavioral constraints are presented in a compact, readable way.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, the description is sufficiently complete. It explains what the tool does, what input it expects, and the key constraints an agent must know to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the path parameter at 100%, so the baseline is 3. The description adds value by specifying realpath resolution, symlink escape rejection, and the existence requirement, enriching the semantics beyond the schema's simple 'Absolute or relative directory path to allow'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Grant') and resource ('a directory'), and clarifies the purpose ('for local Cursor agent file writes'). This clearly distinguishes it from sibling tools like remove_allowed_dir and list_allowed_dirs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when a directory needs to be granted for local Cursor agent writes. It doesn't explicitly name alternatives, but the sibling tool names and the 'Grant' verb make the intended usage obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_approveA

Approve or reject pending implement/install actions from chat_send. Until Approve, Cursor stays plan-only (no writes, no Unity/apt/sudo). After Approve, the closer may write only inside the allowlisted cwd. Optional comment is stored on the thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentNoOptional note stored with the decision
decisionYes
thread_idYesChat thread id that has pendingApproval

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the critical behavioral consequence: before approval no writes happen, after approval only the allowlisted cwd is writable. It also mentions that an optional comment is stored. This is meaningful context beyond the schema. It doesn't cover error handling or rejection side effects, but the key behavior is well captured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste. The purpose is front-loaded, and the behavioral consequences are stated in a compact, easily parseable manner. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the pre/post conditions and the allowlist constraint. It doesn't enumerate edge cases like what happens on a reject or if the thread has no pending approval, but those are predictable from the schema and the overall tool interaction. The essentials are covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (thread_id and comment have descriptions; decision has only an enum but that is self-explanatory). The description adds context about pendingApproval and the approval flow, but does not add param-specific details beyond what the schema already provides. It stays at the baseline for adequate coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is explicit: 'Approve or reject pending implement/install actions from chat_send.' It names the resource (pending actions) and the specific verb (approve/reject), and it clearly differentiates from siblings like chat_send and run_workflow by focusing on the approval gate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the pre- and post-approval behavior ('Until Approve, Cursor stays plan-only... After Approve, the closer may write only inside the allowlisted cwd'), which effectively tells an agent when to invoke this tool (when there is a pendingApproval). It does not explicitly mention when not to use it, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_getA

Read one chat thread (messages, speakers, pending approval). Includes busy=true while debate/single is still running so clients can poll instead of blocking on chat_send wait.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_idYesChat thread id from chat_send

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It clearly states that this is a read operation, reveals that busy=true is included while the debate/single is still running, and explains the non-blocking polling use case. It could mention error behavior or not-found cases, but the core runtime behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences carry all the essential information with no filler. The primary purpose is front-loaded, followed by a concise behavioral note about busy polling. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description covers the purpose, the contents of the response, and the polling behavior that matters to clients. It doesn't spell out edge cases like invalid thread_id, but the description is otherwise complete enough for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the only parameter, thread_id, is described as 'Chat thread id from chat_send'. The tool description does not add meaning beyond this, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Read one chat thread', and specifies exactly what is included (messages, speakers, pending approval). It distinguishes itself from siblings like chat_list by emphasizing 'one' thread and by mentioning the busy polling behavior tied to chat_send.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical usage context: clients can use chat_get to poll for busy=false while a debate/single is still running, instead of blocking on chat_send wait. It doesn't explicitly enumerate alternatives or exclusion cases, but the polling guidance makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_listA

List persisted GUI/MCP chat threads (id, title, agents, updatedAt).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it does so adequately: 'List persisted...' clearly implies a read-only operation, and the parenthetical names the exact fields returned. It does not discuss ordering, pagination, or user scoping, but for a zero-parameter read-only list this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the action, resource, and output fields with no filler. It is concise without being a tautology and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with no output schema, mentioning the returned fields is sufficient for basic invocation. It could add ordering or clarify whether 'GUI/MCP' means two separate thread sources, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so there is no missing parameter documentation to compensate for. The schema is fully covered by virtue of having an empty properties object, and the description adds no conflicting or misleading input semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'List persisted GUI/MCP chat threads' — and enumerates the returned fields (id, title, agents, updatedAt). The resource is distinct from sibling tools like list_agents and list_runs, so an agent can tell it apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, exclusions, or references to alternatives are provided. The description does not help an agent decide between chat_list and related listing tools such as list_agents, list_runs, or list_local_models.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_sendA

Send a natural-language message through the same auto-router the GUI uses. Default pin is auto: hardware/vLLM/allowlist questions hit control tools; build/fix/review/plan with two or more ready backends (including Cursor) runs a round-table. pin=debate forces every ready local server plus ready Cursor/Gemini/cloud specialists to answer (Late MCP uses this). Implement/install stays plan-only until the user Approves (pendingApproval on the thread). Q&A and debate text are not blocked. pin=single or a backend id skips debate. File writes never go to vLLM. Assistant messages include speaker id, nickname, and a loopback logoUrl when a logo is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
pinNoauto (default: debate on build/fix/review/plan when two backends including Cursor are ready, or when two local servers are ready), debate (force round-table: every ready local vLLM/Ollama/llama.cpp plus ready Gemini/Cursor/cloud), single (one speaker), or a backend id (local, cloud, gemini, …). Pinning a backend skips debate. Naming a backend still pins that one speaker.
waitNoWait for the full reply (default true)
branchNo
pr_urlNo
messageYesUser message, as you would type in the GUI chat
repo_urlNo
thread_idNoExisting chat id; omit to start a new thread
extra_contextNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It candidly discloses debate mode, pendingApproval gating, non-blocking Q&A/debate, file-write routing restrictions, and assistant-message metadata. This is unusually transparent about side effects and modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by dense, distinct behavior rules with no filler and no repetition of schema content. Every sentence adds a separate routing, blocking, or output fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter tool with no output schema and no annotations, it covers routing, approval gating, blocking behavior, and response message fields. It does not state the exact return shape or how to retrieve/follow up on the resulting thread via chat_get/follow_up, leaving a small but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 44%, and the description compensates richly for pin by extending the schema text with auto-router behavior. However, it is silent on cwd, branch, pr_url, repo_url, and extra_context, leaving several parameters underspecified in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+mechanism: 'Send a natural-language message through the same auto-router the GUI uses.' The routing detail makes it distinct from thread-reading, approval, and workflow-run siblings, even though it doesn't name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing context: auto default, forced debate, single/backend pin, and when implement/install stays plan-only. It does not explicitly enumerate sibling alternatives or say when to use chat_get/chat_approve instead, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_local_modelA

Permanently delete a downloaded snapshot from the allowlisted models directory. Stops that model if it is running. Requires confirm=true. Does not unregister other backends.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true; refuses otherwise
model_idYesCatalog id whose weights to delete

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it excels. It discloses permanence ('Permanently delete'), side effects ('Stops that model if it is running'), the safety requirement ('Requires confirm=true'), and the limitation ('Does not unregister other backends'). This is exactly the transparency needed for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all front-loaded and necessary. The first sentence states the core action, the second covers side effects, the third covers preconditions and scope limitations. No filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive tool with no annotations and no output schema, this description is complete. It covers the action, side effects, safety gate, and scope exclusion. An agent has everything needed to invoke it correctly and to know what to expect after execution.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by defining model_id as a 'downloaded snapshot' in the 'allowlisted models directory,' and by restating the confirm=true requirement in operational terms. This goes beyond the schema descriptions without duplicating them unnecessarily.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Permanently delete a downloaded snapshot from the allowlisted models directory.' This clearly distinguishes it from siblings like download_local_model, start_vllm, stop_vllm, and remove_vllm. An agent can immediately tell this tool is for deleting local model files, not for managing running backends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it deletes downloaded snapshots, stops the model if running, and explicitly states it does not unregister other backends. This provides an implicit boundary between this tool and backend-managing siblings like remove_vllm. However, it does not explicitly name an alternative tool, so it falls short of a perfect 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dispatchA

Send a task to one specialist. Prefer chat_send for natural language so the orchestrator auto-routes (including round-table debate). Cursor local backends can edit files only inside the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorkspace path for local Cursor agents. Must be inside an allowed directory (see list_agents writePolicy).
taskYesWhat the specialist should do
waitNoWait for completion (default true). If false, poll with get_run
modelNoPer-run model override
branchNoBranch or starting ref
pr_urlNoPull request URL for triage/review
backendNoOverride backend id from config, e.g. cursor-local, anthropic, openai, openrouter, gemini, vllm-local
repo_urlNoGit remote URL for Cursor cloud agents
specialistYesSpecialist id, e.g. planner, builder, reviewer, pr-triage, or a custom external agent id
extra_contextNoAdditional context to include in the prompt
cloud_auto_create_prNoCloud Cursor agents only: open a PR when done

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It does add a valuable constraint: Cursor local backends can only edit files inside the write allowlist. However, it does not describe what dispatch returns, whether a run is created asynchronously, or other side effects beyond the schema's wait parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main purpose comes first, followed by routing guidance and a critical constraint. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with no output schema and no annotations, the description provides solid orientation: the single-specialist scope, the chat_send alternative, and the filesystem restriction. It falls short of full completeness because it never explains what a successful dispatch returns or how to interpret the run outcome, though the schema's wait parameter partially covers polling behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 11 parameters already described meaningfully. The description adds no new parameter-level detail except reinforcing the cwd allowlist constraint, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Send a task to one specialist') and differentiates itself from chat_send, which auto-routes natural language. This makes the core purpose immediately identifiable and distinguishes it from the closest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Prefer chat_send for natural language so the orchestrator auto-routes (including round-table debate)', giving clear guidance on when the alternative should be used. It also warns about the write allowlist for Cursor local backends, which is directly relevant to using dispatch.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_local_modelA

Download a catalog model (or Hugging Face org/name repo) into the allowlisted models directory (default .orchestrator/models). Large; requires an explicit model_id. Honors HF_TOKEN / HUGGING_FACE_HUB_TOKEN for gated repos. dry_run only checks the destination path.

ParametersJSON Schema
NameRequiredDescriptionDefault
destNoOptional destination directory; must be inside the write allowlist
dry_runNoValidate allowlisted path only; do not download
model_idYesCatalog id from list_local_models, or a Hugging Face repo id

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden and does well: it discloses the allowlisted destination, size implication, reliance on HF_TOKEN/HUGGING_FACE_HUB_TOKEN for gated repos, and the limited scope of dry_run. It does not mention overwrite behavior or return details, but the disclosed traits are meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences deliver purpose, destination, warnings, auth, and dry_run behavior with no filler. The most important scoping information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter download tool with no annotations, the description is nearly complete: it covers destination, auth, and dry_run. It could add what the tool returns or whether it overwrites existing files, but nothing required for a safe first invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, and the description adds value on top: it supplies the default destination directory, clarifies that model_id can be a catalog id or HF repo id, and explains dry_run semantics beyond the schema's one-liner.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise operation: download a catalog model or HF repo into the allowlisted models directory, with a default path. This clearly separates it from local-model management siblings like delete_local_model or list_local_models.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: use it for large model downloads into the allowlisted directory, pass an explicit model_id, and use dry_run to validate the destination. It does not explicitly contrast with alternatives or state when not to use it, so it misses the full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

follow_upA

Continue an existing specialist run. Cursor backends resume the same agent (full conversation + workspace). External backends continue with stored chat history.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
run_idYesRun id returned by dispatch or run_workflow
messageYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It usefully explains how different backends behave (cursor resumes the same agent; external backends continue with stored history), which goes beyond the schema. However, it does not mention return behavior, blocking semantics, or failure cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the core purpose, then add backend-specific detail. No redundant phrasing or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the central continuation behavior and backend differences, but leaves gaps: no output schema, no explanation of 'wait', and no indication of what response the agent should expect. For a three-parameter tool, this is acceptable but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate, but it does not explain the 'message' or 'wait' parameters. run_id is minimally documented in the schema, but the description adds nothing about the meaning or expected format of the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Continue') and resource ('existing specialist run'). It is distinct from dispatch/run_workflow, which start new runs, though 'specialist run' is not precisely defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for continuing an already-started run rather than starting one, but it does not explicitly say when to use this tool versus alternatives like get_run, chat_send, or dispatch. It provides backend-specific context but no direct usage guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_runA

Fetch status and output for a dispatch or workflow step by run id.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. 'Fetch' clearly signals a read-only operation and names the returned content, but it does not disclose response shape, error behavior, or whether output is truncated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, action-first, with no filler. Every word contributes to the tool's purpose and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool, the description is nearly sufficient: it identifies what is fetched and how to address the target. It only lacks a pointer to list_runs for discovering run ids and a brief note on expected output details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only restates that lookup happens 'by run id.' It adds little beyond the run_id property name and does not explain the format, source, or how to obtain a valid run id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch'), a clear resource ('status and output for a dispatch or workflow step'), and an identifier ('run id'). This distinguishes it from list_runs (listing runs) and dispatch/run_workflow (creating runs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when a run_id is known and status/output is needed, but it does not explicitly mention alternatives or when-not conditions. The contrast with list_runs is natural but left for the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_agentsA

List specialist agents, backends (Cursor + external), workflows, write-allowlist directories, default cwd, and local-runtime status (hardware summary, vLLM running vs stopped, Cursor cloud / CURSOR_API_KEY). Call this before dispatching work so you pick a ready backend. Re-reads .env and GUI secrets on each call so newly added keys take effect without restarting Cursor. Local Cursor agents may only write inside allowed directories. Cloud Cursor agents cannot reach local vLLM; use local-and-cloud or cloud-with-local-draft workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It goes beyond a static listing by revealing that .env and GUI secrets are re-read on every call, that local agents have write restrictions, and that cloud/local connectivity affects workflows. A minor lack is not explicitly stating whether the call itself is side-effect free, though the framing strongly implies it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and unusually long for a no-parameter tool, but every clause contributes either to what is listed, when to call it, or important runtime caveats. It is front-loaded with the inventory purpose, though the punctuation-heavy middle section is somewhat packed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and zero parameters, the description is remarkably complete: it names the full inventory, the trigger condition, the state-refresh behavior, and the limitations that affect backend selection. An agent has enough to call and interpret this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to add beyond the schema. It instead compensates by detailing exactly what statuses and fields will be reported, which indirectly clarifies what the agent should expect from the call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb 'List' and enumerates a precise resource set: agents, backends, workflows, allowlist directories, cwd, and runtime status. This distinguishes it clearly from the many sibling tools by establishing it as a discovery/inventory tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to call this before dispatching work and explains why: to pick a ready backend. It also gives concrete runtime exclusions and constraints, such as local-only write directories and cloud agents being unable to reach local vLLM, with suggested workflow alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_allowed_dirsA

List directories local Cursor agents may write to, plus the default cwd. The workspace is granted by default until you add more.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must carry behavioral disclosure. It reveals non-obvious behavior (default cwd included; workspace granted by default until more directories are added), and the verb 'List' signals a read-only operation. It doesn't explicitly say 'no side effects,' but nothing suggests mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first front-loads the core action and resource, the second adds the key default-state behavior. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only listing tool, the description covers what the result includes and the default grant behavior. It doesn't specify the output format, but with no output schema and a simple list, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description adds context about what will be listed, which is all that parameter semantics could require.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb 'List' and a precise resource: directories local Cursor agents may write to, plus the default cwd. This clearly distinguishes it from mutation siblings like add_allowed_dir and remove_allowed_dir.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides useful context ('The workspace is granted by default until you add more') and implies the list operation is how to inspect the current grant. It doesn't explicitly name alternatives or when-not-to-use conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_hardwareA

Summarize discrete GPUs for local model serving (NVIDIA, AMD, Intel, or CPU if none), with VRAM, primaryBackend, and any local vendor Docker images for serving.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. 'Summarize' signals a non-mutating operation, and the fallback ('CPU if none') plus output fields such as primaryBackend and vendor Docker images disclose key behavior. It does not discuss performance, privileges, or exact return structure, but those are less critical for a zero-parameter read-only listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence front-loads the action and scope, then packs the relevant output details without filler. No wasted clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description names the reported fields (VRAM, primaryBackend, Docker images) and the fallback case. It is complete enough for an agent to invoke and interpret the result, though it does not define primaryBackend or the exact response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so there is no parameter semantics burden; the description adds the expected output context. Baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('summarize'), a defined resource ('discrete GPUs'), and a use context ('local model serving'); enumerates vendor scope and return fields, so it is clearly distinguishable from sibling tools, none of which list hardware.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for local model serving' establishes when the tool is relevant, and the focus on GPUs plus CPU fallback makes its role clear among model-serving siblings. It does not explicitly rule out alternatives or name a sibling, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_local_modelsA

Every curated open-weight chat model for local vLLM (full catalog, not a short slice): fit flags for this GPU (weights + ~20% KV headroom), newest Hub id when a family has several names, downloaded under the allowlisted models dir, and every running loopback vLLM instance (backend id, port, image).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full transparency burden. It discloses a surprising behavioral scope by noting that the tool also returns every running loopback vLLM instance, and it specifies useful output facets such as GPU fit flags, newest Hub id, and the allowlisted directory. It does not explicitly state 'read-only,' but the list-style content and zero-parameter signature make that inference strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: it opens with the catalog scope, then efficiently appends the relevant filtering and output details. There is little wasted wording, though the long colon-separated clause sequence is slightly run-on and would be clearer as a short bulleted breakdown.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter listing tool, the description covers the important content areas and the surprising inclusion of running vLLM instances, so an agent has enough information to select and invoke it correctly. It does not specify the exact return structure or how the model list and instance list are combined, and there is no output schema to fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema already provides complete coverage, so there is no parameter-semantic burden for the description to carry. The baseline score for a no-parameter tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource, the full curated catalog of local vLLM models, and explicitly contrasts it with 'a short slice,' distinguishing it from recommendation-style siblings. It also states the key discriminating contents: fit flags, Hub id resolution, allowlisted directory, and running vLLM instances. This makes the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'full catalog, not a short slice' implies the tool should be used when an exhaustive list is needed rather than a targeted recommendation, which gestures at alternatives like recommend_local_models. However, it never names an alternative or gives an explicit when-to-use/when-not-to-use rule, so the guidance remains implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_runsA

List recent orchestrated runs, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It communicates that the operation is a read-only listing and provides order ('newest first') and scope ('recent') behavior, but it does not disclose pagination, default limit behavior, or whether all run statuses are included. It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Eight-word sentence with a strong front-loaded verb and no filler. 'Recent' and 'newest first' add meaning without redundancy; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one optional parameter, no output schema), so the core purpose and order are present. However, there is no annotation coverage, no guidance on the 'recent' window or default limit, and no sibling differentiation, leaving an agent to infer several invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions the single 'limit' parameter. The property name and min/max constraints give basic semantics, but no prose explains how the limit is applied (e.g., number of runs returned or default when omitted), so the description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the operation ('List') and the resource ('orchestrated runs') and adds a sort order. This is specific enough to distinguish from get_run (single run) and run_workflow/follow_up (run creation/continuation), so it is not a bare restatement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It does not explicitly state when to prefer this tool over siblings such as get_run, nor what to do if a specific run or a filtered set is needed. The intended use (viewing recent orchestrated runs) is only implied by the phrasing, and no exclusions or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

llamacpp_statusA

Probe a loopback llama.cpp llama-server OpenAI API (default http://127.0.0.1:8080/v1). Does not download GGUF files or start a process. Non-loopback URLs are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_urlNoOpenAI-compat base such as http://127.0.0.1:8080/v1; must be 127.0.0.1/localhost

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and does it well: it states this is a probe (not a download or process start) and that non-loopback URLs are rejected. It does not mention the response shape or what happens when the server is unreachable, but the disclosed restrictions and non-mutating scope are solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler. The main action and resource are front-loaded, followed by necessary exclusions and constraints. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter status probe with low complexity, the description is largely complete: it covers what the tool does, what it does not do, and URL restrictions. The main gap is that no output schema exists and the description does not state what the probe returns, but the tool name and 'status' context mitigate this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains the base_url format and loopback requirement, so the baseline of 3 applies. The description adds marginal value by naming the default value (http://127.0.0.1:8080/v1), but the parameter semantics are primarily handled by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Probe') and resource ('loopback llama.cpp llama-server OpenAI API') with an explicit default URL. The negative clauses ('Does not download GGUF files or start a process') clearly distinguish it from download/start sibling tools, and naming llama.cpp separates it from vllm_status and ollama_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when this tool applies: probing a local llama.cpp server, and it explicitly excludes downloading GGUF files or starting a process. It does not name alternative sibling tools directly, but the exclusions make the selection boundary unambiguous for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ollama_statusA

Probe a loopback Ollama daemon (default http://127.0.0.1:11434). Lists tags when it is running. Does not install Ollama. Non-loopback URLs are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_urlNoOpenAI-compat base such as http://127.0.0.1:11434/v1; must be 127.0.0.1/localhost

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and does it well: it states the tool only talks to a loopback daemon, lists tags when running, does not install Ollama, and rejects non-loopback URLs. It does not describe failure behavior when the daemon is down, but the main side-effect and safety aspects are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each earning its place. The primary purpose and default endpoint are front-loaded, followed by key constraints and exclusions. No fluff or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple probe tool with no output schema, the description covers the essential facts: target daemon, default URL, what it returns (tags), and key limitations. It could mention the behavior when the daemon is not running, but the description is sufficient for an agent to invoke it correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes the base_url parameter. The description adds value by specifying the default URL (http://127.0.0.1:11434) and reinforcing the loopback-only restriction, going beyond the schema's basic parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Probe') and a specific resource ('loopback Ollama daemon'), with the default endpoint included. This clearly distinguishes it from sibling status tools like vllm_status and llamacpp_status by naming Ollama as the target.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when checking an Ollama daemon on loopback. It also gives explicit exclusions: it does not install Ollama and rejects non-loopback URLs. It does not explicitly name sibling alternatives, but the context is strong enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_local_modelsA

Every catalog model for local vLLM, with fit flags for the GPUs on this computer (fits / needs tensor parallel / too big). Newest Hub id is marked when a family has several names (Qwen3.8 over Qwen2.5, Gemma 4 over Gemma 2/3, Llama 4/3.3 over 3.1). Nothing is hidden. Without an accelerator, only tiny CPU-feasible entries fit.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses that fit flags are computed for local GPUs, explains the three fit categories, notes that newest Hub IDs are marked, and states that nothing is hidden. It intentionally reveals the hardware-dependent filtering behavior, especially the CPU-only fallback.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all dense with useful information and zero fluff. The most important point — exhaustive catalog with fit flags — is front-loaded, and the extra details about version selection and accelerator absence are compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description gives enough context for an agent to know what to expect: fit categories, version preference marks, exhaustive coverage, and CPU-only behavior on machines without an accelerator. It could add a sentence about the intended follow-up (e.g., download or start), but it is already quite complete for a zero-parameter read-style tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so there is no parameter burden for the description to carry. The baseline for no-parameter tools applies, and the description adds no unnecessary param-related filler.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool surfaces every catalog model for local vLLM with hardware-fit flags, which conveys the resource and the kind of recommendation being made. It does not explicitly contrast itself with sibling list_local_models, but the scope ('Every catalog model' and 'fit flags') is sufficiently specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when selecting models for this computer's GPUs and when the user wants an exhaustive, unfiltered view of the catalog. However, it does not explicitly say when not to use it or mention alternatives like list_local_models for installed models.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_allowed_dirA

Revoke a previously granted write directory. Local Cursor dispatch will fail if cwd is no longer allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesDirectory path to remove from the allowlist

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility. It discloses the core mutating behavior (revoke) and a meaningful side effect (Local Cursor dispatch fails if cwd loses access). This goes beyond a bare statement of purpose, though it omits details like behavior for non-existent paths or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no fluff. The primary action is front-loaded, and the second sentence adds a genuinely useful consequence rather than repeating the tool name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter revocation tool, the description covers what the tool does and an important operational consequence. No output schema exists, but for a mutating command this is acceptable; still, a brief note on error behavior would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes the single parameter with 100% coverage, so the description does not need to do much. It adds mild contextual framing by calling it a 'write directory,' but no new parameter-level details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a precise verb/resource pair ('Revoke a previously granted write directory') and clearly differentiates from siblings like add_allowed_dir and list_allowed_dirs by focusing on removal. The consequence clause reinforces what the tool actually does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'previously granted' makes the usage context clear, and the warning about Local Cursor dispatch failing provides practical guidance about consequences. However, it does not explicitly name alternatives or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_vllmA

Stop one vLLM instance and unregister its backend and specialist from agents.config.yaml. Other running models stay up. Does not delete downloaded weights.

ParametersJSON Schema
NameRequiredDescriptionDefault
model_idNoCatalog id of the instance to remove
backend_idNoBackend id, e.g. vllm-qwen25-7b-instruct

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the config file mutation, the selective shutdown, and two important non-effects: other models stay up and weights remain on disk.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences each add value: the core action, the scope, and the clarifying non-effect. The description is front-loaded and contains no redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers the essential invocation semantics and side effects well. Minor gaps remain around error conditions, whether a restart is possible after removal, and which parameter is needed when both are optional.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with 100% coverage, so the baseline applies. The description loosely maps to model_id/backend_id but adds no extra detail about parameter precedence, combinations, or formats beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific action verbs ('stop' and 'unregister') with clear resources (vLLM instance, backend, specialist, agents.config.yaml). It also distinguishes itself from sibling operations by explicitly stating that downloaded weights are not deleted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes the operation: it affects exactly one instance, leaves other running models up, and does not remove weights. It does not explicitly name alternative tools such as stop_vllm or delete_local_model, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_workflowA

Run a named multi-agent pipeline. Built-in: ship-feature (planner → builder → reviewer), troubleshoot-pr (pr-triage → builder → reviewer), local-and-cloud (vLLM + Cursor cloud in parallel), cloud-with-local-draft (vLLM draft then cloud builder). Each sequential step sees prior output. Parallel recipes collect both results. Local file writes still require an allowed cwd. Cloud agents never call localhost vLLM.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo
taskYesUser goal or PR description
branchNo
pr_urlNo
repo_urlNo
workflowYesWorkflow id from list_agents
extra_contextNo
stop_on_errorNoDefault true

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden, and it does so substantively: it reveals that sequential steps see prior output, parallel recipes collect both results, local writes require an allowed cwd, and cloud agents never call localhost vLLM. It does not disclose the return model (e.g., whether a run ID is returned synchronously or how to poll), which keeps this from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose first, then workflow options, then behavioral constraints. Every sentence carries useful information with no filler or repetition of schema details, achieving high information density in under 100 words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex multi-agent orchestration tool with 8 parameters and no output schema, yet the description says nothing about the return value, run lifecycle, or how to retrieve results. Sibling tools like get_run and list_runs hint at a run model, but the description itself leaves an agent without enough information to know what happens after invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%, so the description needed to compensate for undocumented parameters. It adds real value for 'workflow' by listing built-in option names and for 'cwd' by noting the allowed-directory requirement. However, branch, pr_url, repo_url, and extra_context remain unexplained in both schema and description, leaving a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Run a named multi-agent pipeline.' It then enumerates four concrete built-in workflows (ship-feature, troubleshoot-pr, local-and-cloud, cloud-with-local-draft), making the tool's scope unmistakable and clearly distinguishing it from simpler sibling tools like dispatch or vllm_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance by listing the built-in recipes and explaining sequential vs. parallel execution behavior. It does not explicitly contrast run_workflow with alternatives like dispatch or chat_send, so exclusions and when-not-to-use guidance are missing, but an agent can infer the intended use case from the named pipeline framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_vllmA

Launch a local OpenAI-compatible server bound to 127.0.0.1 only (never 0.0.0.0). Each catalog model gets its own Docker container, port in 8000–8099, backend id (vllm- from the catalog id, e.g. vllm-qwen25-7b-instruct), and specialist. Tensor-parallels across every GPU only when the catalog fit needs more than one card; models that fit a single GPU stay at --tensor-parallel-size 1. Pass use_all_gpus=false to pin to one GPU even when the model is larger. Does not stop other orchestrator vLLM containers unless replace=true (restarts this model only). On intel-xpu, if intel/llm-scaler-vllm or intel/vllm:*xpu is local, starts that container (API published as 127.0.0.1:port:8000). Model must already be downloaded. Waits until GET /v1/models is healthy, upserts that backend + specialist, and stores a dummy loopback Bearer in gitignored GUI secrets if needed (never copy a key from vLLM). Cloud agents still cannot reach this server.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoMust be 127.0.0.1 or localhost; any other value is rejected
portNo
imageNoLocal Docker image override, e.g. intel/vllm:0.17.0-xpu or intel/llm-scaler-vllm:0.21.0-b3
replaceNoIf true, stop the existing instance of this model before starting. Other running vLLM models are left alone.
runtimeNoForce Docker (Intel images) or host vllm. Default on intel-xpu is docker when a matching image exists.
model_idYesCatalog id or Hugging Face repo already downloaded
timeout_msNo
quantizationNo
use_all_gpusNoAllow using every GPU when the catalog fit needs tensor parallel. False: pin to one GPU. Models that already fit one card stay on one GPU even when this is true.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully carries the burden of behavioral disclosure. It covers binding restrictions, container isolation, tensor-parallel scaling, health checking, backend/specialist upsert, dummy Bearer storage ('never copy a key from vLLM'), and the fact that cloud agents cannot reach the server. This is exceptionally detailed for a tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long yet dense; every sentence introduces a distinct fact (binding, containerization, GPU scaling, replace semantics, intel-xpu special case, health wait, secrets handling). The most important scoping constraint ('bound to 127.0.0.1 only') is front-loaded at the very beginning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema or annotations, the description covers prerequisites, side effects, platform differences, security, and idempotency. It also describes the completion condition (waits until GET /v1/models is healthy) and the state changes performed, making the tool fully actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 67% of parameters, and the description adds meaning beyond them—e.g., clarifying the default tensor-parallel behavior, the intel-xpu container selection, the backend id derivation (vllm-<slug>), and the port range. It does not explain timeout_ms or quantization, but the schema constraints/enums partially cover those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Launch'), a resource ('local OpenAI-compatible server'), and adds precise constraints (bound to 127.0.0.1 only, port 8000–8099, per-model Docker container). It clearly differentiates from sibling tools like stop_vllm, remove_vllm, and vllm_status by focusing on starting a vLLM server.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a prerequisite ('Model must already be downloaded'), explains when to use use_all_gpus=false, and gives platform-specific behavior on intel-xpu. It also clarifies the replace semantics relative to other running containers. However, it never explicitly names sibling alternatives such as download_local_model or vllm_status, leaving some comparison implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_vllmA

Stop one orchestrator-managed vLLM instance (container or host process group). Pass model_id or backend_id to leave other running models up. If several are running and neither id is set, the call fails unless all=true. Does not stop unrelated Docker containers (including a leftover orch-vllm you did not start this way).

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoStop every orchestrator-tracked vLLM instance
model_idNoCatalog id of the instance to stop
backend_idNoBackend id, e.g. vllm-qwen25-7b-instruct

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It explains conditional failure ('the call fails unless all=true'), scopes the operation to orchestrator-managed instances, and clarifies the leftover orch-vllm edge case. It does not detail the exact stopping mechanism or what happens if the target is not found, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the primary action and scope, and every sentence adds unique value. There is no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations or output schema, the description covers the main invocation logic, key failure mode, and scope exclusions. Minor ambiguities remain, such as behavior when exactly one instance is running with no id set, but the overall guidance is sufficient for correct use in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all three parameters, but the description adds valuable semantics: pass model_id or backend_id to leave other running models up, and all=true bypasses the failure when no id is set. This goes beyond the simple property descriptions in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Stop one orchestrator-managed vLLM instance') and identifies the resource type ('container or host process group'). It also explicitly excludes unrelated Docker containers, which differentiates its scope from broader stop operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete guidance on when to pass model_id or backend_id, and when all=true is required. It also includes an important exclusion ('Does not stop unrelated Docker containers'). However, it does not explicitly discuss alternatives like remove_vllm or describe when a user should prefer a different tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vllm_statusA

All orchestrator-managed vLLM instances (image, port, model, backend id, container) plus whether a serving stack is installed (including local Intel Docker images).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the output scope and the local Intel Docker image nuance, and the status framing implies a read-only operation. However, it does not explicitly state that no state changes occur, nor any other behavioral traits such as permissions or latency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-structured sentence delivers the full scope of the tool. The core subject is front-loaded, and the parenthetical detail adds meaningful specificity without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status/read tool, the description adequately conveys what information the agent will receive. A formal return schema or exact JSON shape would improve completeness, but the description gives enough detail to set expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description correctly focuses on the output rather than parameters, and no parameter compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource ('orchestrator-managed vLLM instances') and enumerates the fields returned (image, port, model, backend id, container), plus the additional serving-stack check. Although it lacks an explicit verb like 'list' or 'get', the intent is evident and it is distinguishable from the lifecycle sibling tools such as start_vllm and stop_vllm.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided about when to use this tool versus alternatives. There is no mention of checking status before starting/stopping instances or comparing against list_hardware/list_local_models. Usage context is only implied by the tool name and content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.1
    • Addedchat_get
    • Changedchat_send1 field changed
      • changedInput schema / properties / pin / description
        Previous value: -"auto (default: debate on build/fix/review/plan when two backends including Cursor are ready), debate (force round-table), single (one speaker), or a backend id (local, cloud, gemini, …). Pinning a backend skips debate."New value: +"auto (default: debate on build/fix/review/plan when two backends including Cursor are ready, or when two local servers are ready), debate (force round-table: every ready local vLLM/Ollama/llama.cpp plus ready Gemini/Cursor/cloud), single (one speaker), or a backend id (local, cloud, gemini, …). Pinning a backend skips debate. Naming a backend still pins that one speaker."
    • Addedllamacpp_status
    • Addedollama_status
    • Changedstart_vllm1 field changed
      • addedInput schema / properties / use_all_gpus
        Added value: +{
        +  "description": "Allow using every GPU when the catalog fit needs tensor parallel. False: pin to one GPU. Models that already fit one card stay on one GPU even when this is true.",
        +  "type": "boolean"
        +}
  2. 21 tool updatesv0.1.0
    • First observedadd_allowed_dir
    • First observedchat_approve
    • First observedchat_list
    • First observedchat_send
    • First observeddelete_local_model
    • First observeddispatch
    • First observeddownload_local_model
    • First observedfollow_up
    • First observedget_run
    • First observedlist_agents
    • First observedlist_allowed_dirs
    • First observedlist_hardware
    • First observedlist_local_models
    • First observedlist_runs
    • First observedrecommend_local_models
    • First observedremove_allowed_dir
    • First observedremove_vllm
    • First observedrun_workflow
    • First observedstart_vllm
    • First observedstop_vllm
    • First observedvllm_status

TDQS

A3.8/5.0
Disambiguation4/5

Most tools target distinct resources and actions, but recommend_local_models vs list_local_models and dispatch vs chat_send have mild overlap. The descriptions clarify the intended use cases enough to avoid serious misselection.

Naming Consistency3/5

The set mostly uses verb_noun naming, but mixes list_* prefixes with bare verbs like dispatch and follow_up, and vllm_status inverts the pattern compared to get_run/list_runs. Object naming is also inconsistent: remove_vllm vs delete_local_model.

Tool Count3/5

21 tools is on the heavy side and covers several distinct concerns: model management, vLLM lifecycle, agent dispatch, chat, and workflows. Each tool has a role, but the overall surface feels broader than a tightly scoped orchestrator.

Completeness4/5

The surface covers the model lifecycle end-to-end and provides solid agent orchestration, chat, workflow, and run tracking. Minor gaps exist such as no obvious cancel/abort for runs and no workflow editing, but core workflows have no dead ends.

Maintenance

ActivityNo data
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to create and manage Cursor Cloud Agents that autonomously work on GitHub repositories, including creating tasks, monitoring progress, and automatically generating pull requests.
    20
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables routing context and execution across AI tools like Claude, Cursor, Windsurf, and ChatGPT with a shared memory, task board, and context bus, plus local file conversion.
    18
    8
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Cursor agents to communicate via a shared chat room, allowing them to ask questions, share status, and warn about conflicts while collaborating on the same repo.
    133
    MIT

Latest Blog Posts

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/Unaware-Kerbin/agent-orchestrator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server