todox MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TODOX_URL | Yes | Base URL of the todox instance (e.g. https://todox-omega.vercel.app). | |
| TODOX_TOKEN | Yes | Per-user token for authenticating with the todox API. Obtain from the Account page. |
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
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projectsA | Projects that hold a task or a note, newest activity first, with counts and paths. Empty ones are left out ( |
| create_projectA | Register a project by name. Usually unnecessary: get_context and create_task register one from |
| update_projectB | Set name, root_path, repo_url or summary. Right after a project is registered, a one-paragraph summary and repo_url are what make it legible from another machine. |
| delete_projectA | Removes a project and everything under it. Not recoverable; |
| merge_projectsA | Fold a duplicate project into the real one, keeping both sides' tasks, entries, notes and paths -- for the same repository registered twice ( |
| get_contextA | The session-start briefing: standing rules, decisions, dead ends, open questions, open tasks with their linked files and the last handoff. Call it first, with |
| get_file_contextA | Everything todox has recorded against a file: the tasks that touched it with their dead ends and decisions, and the context notes attached to it in full. Ask before editing a file you have not seen this session — a dead end costs nothing to read and an afternoon to rediscover. The path may be absolute or relative to the repository root; both fold to the same answer, so a note linked on one machine is found from another. Pass |
| session_statusA | Call before finishing. |
| list_tasksC | Tasks in a project, filtered by status. |
| get_taskB | One task, its whole log (newest 200; |
| create_taskA | Capture work that will not finish this session. Pass |
| update_taskA | Change title, body, status or priority. 'doing' starts the clock, 'done' stops it; that is where report durations come from. |
| log_entryA | Append one entry: 'decision', 'dead_end', 'question', 'note' or 'handoff'. First line is the headline the briefing shows; keep the body to a screen. Settling an earlier question? Pass its id as |
| delete_entryA | For an entry that was wrong when written (wrong task, a decision never made). An entry overtaken by later work is history, not wrong: append instead. Not for tidying. |
| link_filesA | Attach file paths to a task ( |
| unlink_fileA | Remove a link whose file was deleted, renamed or attached by mistake. Nothing on disk is touched. |
| accept_file_changeA | Clear the stale warning on a linked file once you have read the change and the note still holds (report its current hash first; hosted, via report_file_hashes). If the note no longer holds, fix the note instead. |
| get_context_noteA | The whole body of one context note -- for a note the briefing's budget did not reach (body null, never empty) or a search snippet you need the rest of. Entries are read with get_task. |
| add_contextC | Knowledge that outlives a task: decision, convention, gotcha, preference. Omit |
| update_contextA | Rewrite a note that is wrong or out of date; |
| delete_contextB | For a note that should never have been written (wrong project, or so superseded it misleads). Merely out of date: update_context. |
| searchA | Full-text search over tasks, log entries and notes across ALL your projects, ranked by relevance. Ask in words -- 'why did we choose scrypt over bcrypt' -- terms match independently and more matches rank higher; quote a phrase to require it. Stemmed in English and Turkish, with a substring match underneath so 'FileSync' finds readFileSync. Each hit carries a snippet from the matching part. Filters narrow, never search: |
| activity_reportA | What got done in a window, from the log: tasks completed and opened, time in 'doing' and lead time, models, decisions, dead ends, open questions. format:'markdown' to hand on, 'json' to reason over. Prefer a named period to 'all'. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| start_session | Read what previous sessions established before doing anything else — decisions, dead ends, open questions and the last handoff. |
| wrap_up | Write down what a fresh session would need to continue: state, decisions, dead ends, and what to watch out for. |
| standup | A report built from the log rather than from commits: durations, decisions, dead ends and open questions. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 23 tools
Most tools target a distinct resource and action, and the descriptions explicitly cross-reference alternatives (e.g., delete_context vs update_context). Some overlap remains between add_context and log_entry for recording decisions, and between get_context and get_context_note, so an agent may still need to read carefully.
Nearly all tools use snake_case verb_noun names (create_task, update_project, delete_entry, link_files). A few exceptions (session_status, activity_report, search, log_entry) break the verb_noun pattern but are still readable and consistent in casing.
At 23 tools, the set is in the heavy 16-25 range, and a few specialized tools (merge_projects, accept_file_change, session_status) could make discovery harder. Still, the breadth reflects a genuinely large domain, so it is borderline rather than excessive.
Core CRUD is strong for projects, context notes, and log entries, and tasks have create/get/list/update. However, there is no delete_task despite delete operations existing for notes and entries, and no clear get_project for retrieving project summary/repo_url, leaving notable lifecycle gaps.