free-coding-agent
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Local HTTP port | |
| MCP_HOST | No | Local HTTP bind address | |
| TASKS_DIR | No | Durable task journal directory | |
| MCP_API_KEY | No | User's own HTTP bearer token | |
| FCA_REMOTE_URL | No | User's personal public MCP URL | |
| FCA_WORKSPACES | No | User's known workspaces | |
| TASK_MAX_ACTIVE | No | Maximum simultaneously running task workers | |
| FCA_ALLOWED_ROOTS | No | Filesystem sandbox | |
| TASK_LEASE_TTL_MS | No | Worker lease lifetime | |
| VSCODE_BRIDGE_URL | No | Local VS Code companion endpoint | |
| CHROME_BRIDGE_TOKEN | No | Local Chrome pairing secret | |
| CHROME_EXTENSION_ID | No | Optional extension identity pin | |
| FCA_REMOTE_PROVIDER | No | Personal remote provider | |
| FCA_DEFAULT_WORKSPACE | No | Default workspace | |
| FCA_TAILSCALE_DNS_NAME | No | User's personal Tailscale DNS name | |
| TASK_MAX_REPAIR_ROUNDS | No | Maximum evidence-backed repair rounds | |
| TASK_VERIFY_TIMEOUT_MS | No | Per verification-command timeout | |
| FCA_CHROME_BRIDGE_ENABLED | No | Enable real-Chrome integration |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| run_commandA | Run a shell command (/bin/bash) and wait for it to finish. Returns exitCode, stdout, stderr. Use for builds, tests, git, npm, python, ffmpeg, etc. For servers/watchers that never exit use process_start. |
| process_startA | Start a long-running background command (dev server, watcher, long build). Returns an id; read logs with process_output, stop with process_stop. |
| process_outputA | Read new output from a background process since the last read (or all buffered output with all: true). |
| process_inputA | Write text to stdin of a process started with process_start (REPLs, prompts, interactive CLIs). close: true writes the data and closes stdin. |
| process_stopA | Stop a background process started with process_start (kills its whole process tree). |
| process_listA | List background processes started by this bridge. |
| list_processesA | List OS processes (optionally filtered by name substring). |
| kill_processB | Kill an OS process tree by PID. |
| get_system_infoA | Host info, configured workspaces, default workspace and available integrations. Call this first in a new conversation. |
| pty_startB | Start a real interactive terminal backed by Windows ConPTY. Use for REPLs, debuggers, SSH/TUI programs and CLIs that require a terminal. By default starts the configured interactive shell; command runs inside it, or file+args starts an executable directly. |
| pty_readA | Read new terminal output from a PTY session (or all buffered output with all: true). ANSI escapes are stripped by default. |
| pty_writeB | Write to an interactive PTY. enter: true appends the Enter key. |
| pty_resizeC | Resize a PTY terminal. |
| pty_stopC | Stop and remove an interactive PTY session. |
| pty_listB | List interactive PTY sessions. |
| job_startA | Run a long command (test suite, build, install, benchmark) as a background job. Waits up to waitMs (default 25s): if it finishes you get a smart summary (pass/fail counts, failing tests with context, output tail) instead of the raw log; otherwise poll job_status. |
| job_statusA | Status of a job; waitMs (≤50s) waits for it to finish. Finished jobs return the failure summary. |
| job_outputB | Read a job log: tail (default 200 lines), a line range (fromLine/lines), or grep (regex with context lines). |
| job_cancelB | Cancel a running job (kills its process tree). |
| job_listB | Recent background jobs with status. |
| task_submitB | Create a durable provider-neutral agent task. Supports dependencies, exclusive tree leases, idempotency, repair limits, and authoritative verification commands. |
| task_claimB | Claim one queued/repairing task with an exclusive durable lease. Refuses unmet dependencies, lease conflicts, critical resource pressure, and worker-capacity overflow. |
| task_nextB | Agent-loop primitive: atomically claim the highest-priority runnable task for this worker. Multiple model clients can call this concurrently; leases prevent two workers owning the same tree. |
| task_heartbeatA | Renew a running task lease. Long-lived workers should heartbeat before lease expiry. |
| task_readyA | Worker handoff: mark implementation ready for verification and release the worker lease. The task keeps its tree reserved while verification runs. |
| task_verifyB | Run the task verification gates and apply the verdict durably. Passing gates transition to succeeded; failures transition to repairing until maxRepairRounds is exhausted. |
| task_updateA | Report a worker failure or interruption while it owns the task. Successful work must go through task_ready then task_verify. |
| task_reconcileA | Recover a task left interrupted after restart/lease loss. Requeue it, mark it failed, or explicitly reattach a known-live worker with a fresh lease. |
| task_contractB | Read the self-contained execution/verification contract for one durable task. |
| task_statusB | Read the current durable state of one task. |
| task_listB | List durable tasks filtered by state/project, ordered by priority then creation time. |
| task_eventsB | Read the append-only task audit trail, optionally for one task. |
| task_statsA | Read task counts, active workers, configured capacity, and current resource pressure. |
| task_cancelA | Cancel a durable task. A running task requires its current lease; queued/verifying/repairing tasks can be cancelled by id. |
| resource_statusA | Current workstation resource pressure and admission-controller slots for commands, builds/tests, LSP, diagnostics, background processes and video work. |
| read_fileA | Read a text file with line numbers. Relative paths resolve against the default workspace. Use startLine/endLine for large files. |
| read_many_filesA | Read up to 50 files in one call (strings, or {path,startLine,endLine}). Much faster than several read_file calls. |
| apply_patchA | Apply a multi-file patch atomically (nothing is written unless every hunk applies). Preferred way to change code. Format: *** Begin Patch *** Update File: src/app.ts @@ function main() { (optional anchor line to jump near the change) context line (space prefix) -removed line +added line *** Add File: src/new.ts +file content line *** Delete File: src/old.ts *** Update File: a.ts *** Move to: b.ts *** End Patch Include ~3 unchanged context lines around each change. The result reports compiler/linter problems in the changed files and a checkpoint id for undo. |
| edit_fileA | Replace exact text in one file. Either oldText/newText, or edits: [{oldText,newText,replaceAll}] applied atomically in order. oldText must match exactly once unless replaceAll. Reports diagnostics and a checkpoint id. |
| write_fileA | Create or fully overwrite a file (parent folders are created). Prefer apply_patch/edit_file for changes to existing files. |
| check_filesB | Run the relevant compilers/linters (tsc, eslint, node --check, go vet, gofmt, py_compile, ruff, JSON) on specific files and report problems. |
| checkpoint_listA | List recent checkpoints (one per file-changing tool call) with the files each one touched. |
| checkpoint_rewindA | Undo: restore files to their state before the given checkpoint (default: the latest), undoing it and every later checkpoint. |
| list_directoryB | Tree listing of a directory (skips node_modules, .git, build outputs unless includeIgnored). |
| search_codeA | Search file contents with a regex (ripgrep when installed, Node fallback otherwise). Returns path:line: text; context adds surrounding lines. |
| find_filesB | Find files by glob pattern, e.g. "**/*.test.js" or "package.json". |
| file_infoB | Check whether a path exists and get its type, size and modification time. |
| delete_pathA | Delete a file, or a directory when recursive is true. Undoable with checkpoint_rewind. |
| copy_pathC | Copy a file or directory. |
| move_pathC | Move or rename a file or directory. |
| project_contextA | Start here for any project: detected stack and build/test/lint commands, git state, top-level layout, project instruction files, README start and saved memory notes. |
| repo_mapB | Compact map of a codebase: the most-referenced files with their key functions/classes/types and line numbers. Understand a large project in one call. focus: file names or symbols to prioritise. |
| outlineA | All symbols (functions, classes, methods, types) of a file with line numbers, so you can read_file just the part you need. A directory gives a repo map of it. |
| find_symbolB | Find where a function/class/type/method is defined (name or Container.name) and where it is used (whole-word references). |
| project_memoryA | Durable per-project notes shown by project_context in future conversations. action: list | add (note) | remove (index). Save conventions, gotchas and verified commands — not temporary state. |
| list_workspacesA | List configured project workspaces with git branch and number of changed files. |
| git_statusB | git status (short) plus diff stat against HEAD. |
| git_diffA | Full unified diff of the working tree (or staged changes, or against a ref), optionally for one file. |
| git_logC | Recent commit history. |
| git_commitB | Stage files (all changes by default) and create a commit. |
| web_searchB | Search the web (DuckDuckGo). Returns title, url, snippet for the top results. |
| fetch_urlA | Fetch a URL (follows redirects) and return readable text. raw: true returns the unprocessed body (useful for JSON/APIs). |
| browser_navigateB | Open a URL in the Playwright-controlled Chrome (persistent profile: logins are remembered). Returns the page snapshot with element refs. |
| browser_snapshotA | Accessibility snapshot of the current page with [ref=eN] handles. Use it before clicking/typing. |
| browser_clickB | Click an element by ref (preferred), selector or text. Returns the updated snapshot. |
| browser_typeA | Type into an input/textarea/contenteditable. Replaces its value unless slowly: true (types key by key). submit: true presses Enter. |
| browser_select_optionC | Select option(s) in a . |
| browser_press_keyB | Press a key or chord on the page, e.g. "Enter", "Escape", "Control+A", "ArrowDown". |
| browser_hoverC | Hover over an element. |
| browser_scrollC | Scroll the page by deltaY/deltaX pixels, or scroll an element (ref/selector/text) into view. |
| browser_wait_forB | Wait for a selector or text to appear (state visible/hidden/attached), or just wait timeoutMs. |
| browser_screenshotA | Screenshot of the page (or one element). The image is returned so you can see it, and saved to disk. |
| browser_evaluateB | Run JavaScript in the page. Pass an expression ("document.title") or a function body using return. |
| browser_get_textC | Visible text of the page or of an element (CSS selector). |
| browser_tabsC | List, open (new), select or close tabs by index. |
| browser_consoleC | Console messages, page errors, failed requests and dialogs captured from the browser. |
| browser_upload_fileC | Upload local file(s) through a file input or an upload button (ref/selector/text). |
| browser_resizeC | Set the viewport size. |
| browser_dialogB | Inspect or answer a JavaScript dialog (alert/confirm/prompt) in the Playwright browser. Dialogs are never accepted automatically. |
| browser_closeA | Close the Playwright browser (the persistent profile stays on disk). |
| browser_record_startA | Start recording a video of a browser session. Opens a dedicated recording tab (with your profile logins); every browser_* action afterwards is filmed until browser_record_stop. |
| browser_record_stopB | Stop the recording and save the clip (mp4 via ffmpeg). Returns the file path. |
| record_clipA | Render a video clip from code: pass a complete HTML document (CSS/JS/canvas/SVG animation) or a URL; it is played headlessly at the given size for durationMs and saved as mp4/webm/gif. Default 1080x1920 (vertical, Shorts/TikTok/Reels). If the page defines window.startClip(), it is called when recording begins. |
| chrome_statusB | Connection status of the Chrome extension bridge (the user's real, logged-in Chrome). |
| chrome_extension_reloadA | Reload the Free Coding Agent Chrome extension from disk (after it was updated) and report the new version. |
| chrome_pairing_setupA | Securely configure or rotate the Chrome bridge pairing token in both the connected extension and .env. The secret is never returned. Restart the MCP worker afterwards to enforce it. |
| chrome_dialogA | Inspect or answer a JavaScript dialog (alert/confirm/prompt/beforeunload) that is blocking a tab. Dialogs are never accepted automatically: read the message, then accept or dismiss (promptText for prompt()). |
| chrome_downloadsB | Recent Chrome downloads (file path, state, size, source URL, referrer). |
| chrome_list_tabsA | List all tabs in the user's real Chrome. |
| chrome_switch_tabB | Activate a tab and focus its window. |
| chrome_new_tabC | Open a new tab in the real Chrome. |
| chrome_close_tabC | Close a tab. |
| chrome_navigateB | Navigate a tab to an http(s) URL and wait for it to load. |
| chrome_snapshotA | Semantic snapshot of a tab: interactive elements with [#N] refs, plus page-declared site tools. Take one before clicking or typing. |
| chrome_clickA | Click an element by its [#N] ref using a real (trusted) mouse click via the Chrome debugger; falls back to a DOM click if the debugger cannot attach. |
| chrome_typeA | Focus an element by ref and type text with trusted input (replaces the current value unless append: true). submit: true presses Enter afterwards. |
| chrome_press_keyA | Press a key or chord (e.g. "Enter", "Tab", "Escape", "Control+a") as a trusted key event in the tab. |
| chrome_scrollB | Scroll the inspected tab by y pixels (negative scrolls up). |
| chrome_screenshotA | Screenshot of a tab in the real Chrome (visible viewport). The image is returned so you can see it. |
| chrome_evaluateB | Run JavaScript in a tab's page context (via the debugger). Pass an expression; the JSON-serializable result is returned. |
| chrome_get_textB | Visible text of a tab (document.body.innerText, truncated). |
| chrome_consoleC | Console messages and exceptions captured from a tab since the debugger attached to it. |
| chrome_call_site_toolA | Invoke a tool the web page itself declares (window.mcp / window.mcp_tools / meta[name=webmcp-tool]). Take a chrome_snapshot first to see the catalog. |
| windows_listB | List visible top-level native Windows application windows with process IDs and UI Automation refs. |
| windows_snapshotB | Semantic Windows UI Automation snapshot of a native app window. Returns stable runtime refs, control names/types, supported patterns and bounds. Prefer this over coordinate clicking. |
| windows_actionA | Act on a native Windows UI Automation element from windows_snapshot: invoke, setValue, toggle, select, expand, collapse, focus or scrollIntoView. Re-snapshot after meaningful UI changes. |
| windows_waitB | Wait for a semantic native Windows control to appear, become enabled, or disappear. Matches by accessible name substring, AutomationId and/or control type. |
| windows_screenshotA | Capture the visible bounds of a native Windows application window selected semantically by pid/title. Returns the PNG to the client and saves it under screenshots/. |
| lsp_diagnosticsA | Compiler/type-checker diagnostics from the real language server (gopls, typescript-language-server, pyright) for files or a directory — no VS Code needed. all: true also returns diagnostics the server reported for other files of the project. |
| lsp_definitionB | Go to definition (kind: definition | typeDefinition | implementation) of the symbol at file:line (give character or symbol name). |
| lsp_referencesA | All references to the symbol at file:line, resolved by the language server (exact, not text search). |
| lsp_hoverB | Type signature and documentation of the symbol at file:line. |
| lsp_symbolsB | Symbols: of one file (file), or matching a query across the project (query + path). |
| lsp_callsB | Call hierarchy of the function at file:line: incoming (who calls it) or outgoing (what it calls). |
| lsp_rename_previewA | Preview the exact workspace edits a semantic rename would make. Does not write files; apply reviewed changes through apply_patch/edit_file. |
| lsp_code_actionsA | List language-server code actions/quick fixes/refactors for a source range without applying them. |
| lsp_format_previewB | Preview language-server formatting edits for a file without applying them. |
| lsp_statusA | Which language servers are installed and running (language, project root, pid). |
| vscode_diagnosticsA | Live compiler/linter errors and warnings from VS Code language servers (optionally filtered to one file). |
| vscode_find_referencesB | All references to the symbol at a position (via the language server). |
| vscode_go_to_definitionC | Definition location of the symbol at a position. |
| vscode_open_filesC | Open editor tabs and the active file in VS Code. |
| vscode_debug_stateC | Active debug session and breakpoints. |
| vscode_add_breakpointC | Add a breakpoint (optionally conditional). |
| vscode_open_fileB | Open a file in VS Code at a line so the user can see it. |
| batchB | Run several tool calls in one request. Parallel mode is allowed only when every called tool is read-only. |
| capability_listB | List the live MCP capability catalog. Use prefix to filter tool names. |
| capability_callC | Fallback dispatcher for a capability present on the live server but missing from a cached client catalog. |
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 128 tools
Several large tool clusters overlap heavily: run_command/process_start/pty_start/job_start all run or manage commands, chrome_* and browser_* duplicate browser automation, and lsp_* and vscode_* duplicate language-server queries. Descriptions distinguish some contexts (real Chrome vs Playwright, background process vs PTY vs durable job), but an agent could easily misselect among them.
The dominant convention is snake_case with consistent domain prefixes (browser_, chrome_, process_, task_, lsp_, vscode_), which makes the set mostly predictable. Minor deviations exist, such as list_processes vs process_list, get_system_info, file_info, record_clip, batch, and run_command, preventing a perfect consistency score.
128 tools is an extreme over-provisioning for a single coding-agent server. Even with broad ambitions, the surface is far beyond the typical 3-15 well-scoped range and directly contributes to selection ambiguity and maintenance overhead.
The server covers a remarkably broad coding-agent lifecycle: file read/write/patch/edit, search, git status/diff/log/commit, shell, process/job/PTY control, LSP diagnostics and navigation, browser and real-Chrome automation, Windows UI automation, durable tasks, checkpoints, and web access. Some common operations are missing or only reachable via shell, such as advanced git workflows (push/pull/branch/PR) and project scaffolding, so it is strong but not fully complete.