Casefile
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CASEFILE_AUTO_UPDATE | No | Set to false to turn off auto-update. Default is true. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/skills": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_taskA | Returns everything about one task in a single call: card, parent and children, links from both sides, the project decisions it relies on, computed features, latest summary, open questions, unresolved remarks, case index and transition targets.
The summary covers the case up to its own A remark in
|
| search_tasksA | Searches tasks by a query language string, by separate conditions, or by both. Conditions from both sources combine with An unknown field, operator or value is refused with |
| create_taskA | Creates a task in With A child task takes a part of the parent's work when the parent's output falls into separate results, its checks cannot all pass in one pass, the work does not fit one pass, or it depends on something that does not exist yet. These signs appear on entry into the parent and after each attempt. The response carries the key issued by the tracker. An empty title or
description is refused with |
| update_taskA | Changes the given fields of a task; fields left out stay as they are. Title, description and sections are fixed from Each changed field files |
| transitionA | Moves a task to another status along the fixed transition table. Refusals: leaving A task waiting in
The response names the new status and version and the number of the filed
|
| close_taskA | Closes a task: files the given entries, then the verdicts, then the final
summary, and moves the task to A refusal of any part files nothing and leaves the status as it was. The exit
conditions are checked after filing: a latest verdict other than A latest verdict For a parent task the final summary covers the whole work: the children's results are in their own closing summaries. Tasks this one blocked ( |
| move_taskA | Moves a task to another project, recording the move, both keys and the reason
as a The task gets the next number of the new project, or its own earlier key there
when it returns to a project it has been in: a task holds at most one key per
project. The key it leaves goes to Moving into or out of a frozen project fails with A list of keys moves each task on its own, in list order, so new numbers follow
that order; each moved task gets its own |
| read_entriesA | Returns entry bodies of one task's case, with payload, in number order. Filters combine with Entries of many cases in one stream, with a wait for new ones, come from
|
| add_summaryA | Files a summary: the handover note of a case, in four parts, none of them empty
( A significant step is a decision made, a finished part of the work, a failure that changes the plan, or any point where a colleague would need an explanation of where the work stands. Its index title is the first line of |
| add_entryA | Files an entry without payload: a decision, attempt, finding, artifact, remark, acceptance or note. Entries are immutable: no call edits or deletes one, and a mistaken entry is
corrected by a new entry that references it in An empty title is refused with |
| askA | Files a question to registry participants. The tracker delivers nothing: an addressee sees the question when reading the feed or their inbox. A question stays open until an A What the cases of the parent, its ancestors and sibling tasks already record is
readable through |
| answerA | Answers a question of the same task, or closes it unanswered as withdrawn or
replaced. Any holder of a The first answer closes the question and later ones add to it; neither a
question nor an answer changes the task status. A withdrawn or replaced question
leaves |
| resolveA | Resolves a remark on a task: its outcome and where the work went. Any outcome resolves the remark, |
| add_verdictA | Files the outcome of one review check, as run by the task's assignee within the current pass. A pass starts with each entry into |
| read_project_entriesA | Returns the bodies of a project's case entries, payload included, ordered by entry number. The project's case holds decisions, findings, artifacts and notes about the
project, and the tracker's own entries about its card. Filters combine with
|
| add_project_entryA | Files an entry in a project's case: a decision, finding, artifact or note that concerns the project rather than one of its tasks. The entry number counts inside the project, and A project decision is in force until a later decision names it in An empty title, or a reference to a missing entry, task or project, returns
|
| linkA | Links two tasks and files
An open blocker raises the A closed task ( |
| unlinkA | Removes a link and files A link is removed from either side and under either name of its kind: |
| get_projectA | Returns one project by its key: key, title, description, current attribute values, the project decisions in force and the index of the project's case. The keys of the installation's projects are listed by |
| list_projectsA | Lists the installation's projects, one page at a time: key, title and archive
time. A project's description is returned by |
| list_participantsA | Lists the participant registry: humans and permanent agents, the possible addressees of a question. Temporary agents are not registered and are absent from it. |
| create_projectC | Creates a project with a key, a title and a description. |
| update_projectA | Changes a project's title and description; a field left out stays. The key never
changes. Each changed field files a |
| archive_projectA | Archives a project with a reason and files an The project and its tasks freeze as they are: statuses stay, open tasks need no
closing. From then on any change in the project or its tasks — a new task, an
entry, a transition, an edit, an attribute, a new link — is refused with
An already archived project is refused with |
| restore_projectA | Brings an archived project back: files a A project that is not archived is refused with |
| set_attributeA | Sets the value of a project attribute: a reference fact of the project such as its repository or main branch. One call both creates and changes; which entry it files follows from the attribute's state.
The name keeps the spelling it was created with; another spelling addresses the
same attribute and does not rename it. Attributes carry no types and no search:
the tracker stores the text and acts on none of it. A |
| remove_attributeA | Removes a project attribute and files an A name that matches no attribute of the project is refused with
|
| register_participantA | Registers a human or a permanent agent. The new participant's token is issued through
the REST API. An existing participant's description is changed by |
| update_participantA | Changes a participant's description. Name and kind never change: the name signs entries already filed. The previous description is not kept. |
| wait_journalA | Returns journal entries after the sequence number The journal is every case entry of the installation in one stream, task cases
and project cases alike, in Entries already filed in one case, by number, are returned by |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| casefile | Use whenever you work on a task in a Casefile tracker through its MCP server (get_task, add_summary, close_task and the rest) — taking or continuing a task, keeping its case, asking the human and waiting for the answer, handing work off, splitting it or closing it with verdicts. Use it even when the request is only "do TRK-42" or "carry out the tracker tasks". The steps of a task and the checks between them, with example calls. |
| casefile-setup | Use only when the Casefile MCP tools are missing from your tool list or answer 401 — never while they work. Finds where you run (Claude Code, Codex, Cursor, the Claude Desktop chat, claude.ai) and gives the person the one step that connects Casefile there, with the link. Once the tools answer, use the casefile skill instead. |
TDQS
Scored across 30 tools
Each tool targets a clearly distinct resource and action, with explicit boundaries between similar operations (e.g., add_entry vs add_summary vs add_verdict, transition vs close_task). The descriptions explicitly state which tool to use for which purpose, preventing misselection despite the large number of tools.
The vast majority of tools follow a consistent verb_noun pattern (e.g., create_task, get_project, read_entries). A few tools use single verbs (ask, answer, resolve, link, unlink) and one uses a noun/verb (transition), but these are conventional and still readable.
With 30 tools, the set is on the heavy side for an MCP server, though the domain is complex and many tools have specialized roles. Some consolidation could be possible (e.g., entry-filing tools), making the count borderline rather than clearly appropriate.
The tool surface covers the full lifecycle of tasks, projects, entries, participants, attributes, links, and a journal stream. No obvious gaps exist for the stated purpose; operations like archive/restore, attribute management, and entry reading are all present.