droid-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DROID_MCP_ROOTS | No | Colon-separated directories a session cwd must resolve inside. | ~/repos |
| DROID_MCP_TOKEN | No | Bearer token; required with --http. | |
| FACTORY_API_KEY | No | Enables the REST backend, and is used for spawned sessions instead of the CLI login. | |
| DROID_MCP_MAX_AUTONOMY | No | Autonomy cap: off, low, medium, high; any other value means off. | high |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| droid_findB | Find the user's Factory Droid sessions on this machine, grouped into workstreams (orchestrator + agents) and standalone sessions by repo. Paged with cursor. |
| droid_modelsA | List the models droid can run: built-in ids with their reasoning efforts, BYOK custom models from settings, tier aliases and version wildcards. filter matches id, name or provider. |
| droid_startA | Start a new Droid session in cwd (must be inside the allowed roots) and send it the first prompt. Retrying with the same idempotencyKey returns the same session. Pick a model with droid_models: a built-in id (claude-opus-5-5), a BYOK custom id from ~/.factory/settings.json (custom::), a tier alias (anthropic-latest-premium) or a version wildcard (claude-opus-*). reasoningEffort must be one the model supports. mission needs autonomy 'high'. Unknown models and invalid combinations are refused before anything runs. |
| droid_sendA | Send a message into a session as the user. Sessions this server started take it directly; others need FACTORY_API_KEY (REST) or, for idle standalone local sessions only, allowLocalResume. mode 'interrupt' stops the running turn first. Settings and autonomy change the session before this prompt; settings a route cannot apply come back in |
| droid_waitA | Follow a session: returns new events after afterSeq, waiting up to waitMs (max 50000) for something to happen. Without afterSeq, returns the latest events at once. Use nextSeq as the next afterSeq. |
| droid_respondB | Answer a pending permission prompt (decision = one of the offered option values, optional comment) or AskUser question set (answers, one per question), or cancel it. |
| droid_cancelA | Cancel a session's running turn (scope 'turn'), or close a session this server started (scope 'session'). |
| droid_resultB | Read a session's latest result text and/or the git diff in its cwd, paged by byte offset (use nextOffset to continue). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool maps to a distinct phase of the session lifecycle (find, start, send, wait, respond, result, models, cancel). The only mild overlaps are droid_send vs droid_respond (both inject input) and droid_wait vs droid_result (both surface output), but descriptions make the boundary clear enough.
All names share the droid_ prefix and a short suffix, which is predictable and readable. Minor deviation: most suffixes are verbs (find, send, wait, start, cancel) but result and models are nouns.
Eight tools is a tight, well-scoped set for agent-session orchestration, with each tool earning its place. No redundant or filler tools.
The surface covers discovery, startup, prompting, streaming, permission handling, result/diff reading, model discovery, and teardown via droid_cancel scope 'session'. Minor gaps: no dedicated tool to inspect or change session settings/autonomy outside of droid_send, and no way to apply or export the diff produced by droid_result.