sortwell
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sortwellcapture: I still owe Priya an introduction"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sortwell
An inbox with judgment.
You paste something. It decides what kind of thing it is, which project it belongs to, whether it needs you, and whether you already have it. Then it files it. Your text is stored exactly as you wrote it.
The deciding is done by Jev, an evaluation model that answers typed questions with probabilities and writes no text at all. That is the point: it sorts your notes, it cannot rewrite them.
What it does
Four tools over MCP.
tool | what it does |
| files one item: decides kind, project, urgency, and duplicate, in one request |
| the few things that matter today, ranked, plus projects gone quiet |
| a project finishes, an area is ongoing |
| takes an item off the list; nothing is deleted |
Every item is labelled one of task, decision, project-update, reference, personal-follow-up or ignore, and given an action of now, scheduled, read-later or none.
Related MCP server: MCP Index Notes
A real run
A seven line standup transcript, captured one line at a time against three projects, live:
ok ignore inbox thanks everyone for making the time
ok decision Warehouse rollout nightly build moves to 06:15 UTC
ok task Hiring an analyst send the job advert by Thursday
ok project-update Warehouse rollout R2 connector done, previews last
ok reference Reading that piece on evaluation models
ok personal-follow-up inbox I still owe Priya an introduction
DUP (0.96) Hiring an analyst can someone get the job ad overKind 6/6. The duplicate caught at 0.96. 424 ms per capture. The reworded repeat of the job advert line was filed as a duplicate rather than a second task, so it never reached the list.
Then the shortlist put I still owe Priya an introduction, I keep forgetting at the top, above both project items. The pleasantry and the duplicate were already gone.
One label of mine was wrong, not the model's: I expected the article link to sit in the inbox and it went to the Reading area, whose scope says "articles worth reading at some point". It was right.
What the eval found
evals/ holds a claude plugin eval suite, and its result is worth knowing before you build anything like this.
Given the tools and a skill telling it to use them, the agent called capture zero times in four runs. Handed a transcript and asked to file it, it wrote its own tidy summary instead. Not blocked, no error, just never reached for. The same thing happened with a sister project, so it is a pattern, not a fluke.
The lesson: an MCP server is not a behaviour change. Tools sitting there, even with a skill, do not reliably get used. The SessionStart hook works because it runs whether or not the model decides to look. Treat the tools as the thing that does the work and the hook as the thing that makes it happen.
Install
Needs Node 22 or newer and a TypeSafe API key. Not published to npm; clone it.
git clone https://github.com/Dharundp6/jev-sortwell && cd jev-sortwell
npm install && npm run build
export TYPESAFE_API_KEY=...Try it without any client:
node dist/cli.js project project "Hiring an analyst" -- "recruiting one analyst: advert, screening, interviews, offer"
node dist/cli.js capture "Dharun to send the job advert to the recruiter by Thursday"
node dist/cli.js shortlistAs a Claude Code plugin, from the repo root:
claude plugin marketplace add Dharundp6/jev-sortwell
claude plugin install sortwell@sortwellOr wire the server into any MCP client:
{
"mcpServers": {
"sortwell": {
"command": "node",
"args": ["/absolute/path/to/jev-sortwell/dist/cli.js"],
"env": { "TYPESAFE_API_KEY": "..." }
}
}
}How it decides
One request per capture, four questions answered in parallel: kind, project, action, duplicate. Jev is an evaluation model, so all four come back as probabilities and code does the rest.
Two thresholds, both exported constants rather than hidden numbers. Routing needs 0.45 or the item stays in the inbox, because a wrong home is worse than no home. A duplicate needs 0.70 and a specific item it duplicates, because both questions have to agree.
Ranking is the safe use of a probability. Being ranked third instead of second costs nothing, which is not true of being deleted.
Where things are kept
Two append-only JSONL files in ~/.sortwell, override with SORTWELL_DIR. Nothing is rewritten and nothing is deleted: marking an item done appends a new version and the old line stays. A damaged line is skipped and counted, never removed.
What it will never do
Never rewrite your text. Items are stored verbatim. Jev cannot generate text, so this is structural rather than a promise.
Never delete.
mark_doneandcloseappend; the file only grows.Never guess a home. Below the routing threshold it says inbox.
Never fail closed. No key, or a scorer that errors, and
shortlistreturns everything unranked with a line saying why.
License
MIT
Available Tools
4 toolsadd_projectAdd a project or areaA
Add a project or an area so captured items have somewhere to go. A project finishes; an area is ongoing. The scope line is what routing is judged against, so write it as a plain description of what belongs here rather than a title.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | short name, for example 'Warehouse rollout' | |
| scope | Yes | one line describing what belongs here; routing is judged against this | |
| shelf | Yes | project finishes, area is ongoing, resource is reference, archive is closed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses a key behavioral trait: 'The scope line is what routing is judged against', and advises how to phrase the scope. It does not, however, mention side effects, reversibility, permissions, or any other behavioral aspects. The routing detail is valuable but the overall disclosure is incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the purpose and then deliver actionable guidance. Every sentence earns its place; there is no fluff or redundancy. It is appropriately sized and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 required parameters, full schema coverage, no output schema), the description covers the essential aspects: what the tool does, the distinction between project and area, and the critical routing behavior. It does not describe return values or error conditions, but these are less critical without an output schema. The description is nearly complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a description. The description adds meaningful semantics beyond the schema, notably the guidance on scope ('write it as a plain description of what belongs here rather than a title') and the clarification of project vs. area. This enhances the agent's understanding beyond the raw parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and the resource 'project or an area', and explicitly distinguishes between the two ('A project finishes; an area is ongoing'). It explains the purpose ('so captured items have somewhere to go') and even clarifies how the scope parameter is used for routing. This fully clarifies the tool's function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used after capturing items ('so captured items have somewhere to go') and provides guidance on choosing between project and area. However, it does not explicitly contrast this tool with its siblings (capture, shortlist, mark_done) or state when not to use it. The usage context is implied but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
captureCapture an itemA
Save something the user wants kept: a note, a link, an email, a line from a meeting, anything. Call it once per distinct item; paste a transcript one item at a time rather than all at once. It decides for itself what kind of thing the item is, which of the user's projects it belongs to, whether it needs attention, and whether they already have it, then files it. The text is stored exactly as given and never rewritten. You do not need to classify anything yourself, and you should not ask the user which project it belongs to.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the item, verbatim; it is stored exactly as given | |
| source | No | where it came from: note, url, email, meeting, voice. Defaults to note |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that capture auto-classifies, auto-assigns projects, checks for existing duplicates, and files the item, and that text is stored verbatim and never rewritten. It stops short of explaining what happens on duplicate detection or where the item is filed, but these are not essential for invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is well organized: purpose, batching rule, autonomous behavior, and agent instructions in four sentences. It is efficient, though 'call it once per distinct item' and 'paste a transcript one item at a time' are slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-string-parameter tool with no annotations or output schema, the description is unusually complete: it specifies what to send, how often, what the tool decides, and what the agent should not do. The only minor gap is the absence of any return-value or confirmation behavior, but that is not needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents text and source. The description adds a useful constraint not in the schema: the text parameter must carry one distinct item at a time, not a batch. The verbatim/stored-exactly point repeats the schema, but the batching rule is genuine added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Save something the user wants kept: a note, a link, an email...') and clarifies that capture is the catch-all intake tool. It also distinguishes itself from siblings by stating it decides project, attention, and duplicates itself, so an agent won't confuse it with add_project or mark_done.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage rules: call once per distinct item, paste a transcript one item at a time, and do not classify or ask which project. It does not explicitly name sibling tools as alternatives, but the 'decides for itself' statement effectively routes the agent away from add_project and mark_done.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_doneMark an item doneA
Mark an item finished so it leaves the shortlist. Nothing is deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | the item id, as shown in the shortlist |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Nothing is deleted,' which is a valuable behavioral disclosure beyond the schema. It clarifies that the operation is non-destructive, which is important for an agent deciding whether to call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no waste. The core action and the key non-destructive behavior are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description is complete. It explains the effect and the non-destructive nature. It could mention what happens to the item after marking, but that is not essential for calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'id' parameter. The description adds no additional parameter semantics beyond what the schema provides, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Mark') and resource ('an item'), and clarifies the effect ('finished so it leaves the shortlist'). It distinguishes itself from siblings like capture and add_project by focusing on the shortlist lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when an item should be finished and removed from the shortlist. It does not explicitly state when not to use it or name alternatives, but the context is clear enough for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortlistWhat matters todayA
The few things that matter today, ranked out of everything still open, with any projects that have gone quiet. Call it when the user asks what they should be doing, what is outstanding, or at the start of a working session. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 discloses the nature of the output (a ranked list of open/quiet items) and the absence of arguments. It implies a read-only operation without stating it explicitly, but for a summary tool that's acceptable. It does not mention any side effects or prerequisites, which is appropriate given the simplicity. A 5 would involve explicit statement of no side effects or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the first sentence defining the tool's functionality and the second providing usage guidance. The 'Takes no arguments' sentence is redundant but does not detract. Information is front-loaded: purpose first, usage second. No word is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is complete. It explains what the tool returns (ranked list of open items and quiet projects), when to use it, and that it takes no arguments. The agent has everything needed to call it correctly. There are no missing pieces given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema shows an empty object. The baseline for zero parameters is 4, as the schema fully covers parameter semantics. The description redundantly states 'Takes no arguments,' which adds no new meaning beyond what the empty schema already conveys, but it doesn't hurt. Thus, the score matches the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states what the tool returns: 'The few things that matter today, ranked out of everything still open, with any projects that have gone quiet.' This is a specific, unambiguous output that clearly distinguishes it from siblings like capture, add_project, and mark_done, which perform different actions (capturing, adding, marking done).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage triggers: 'Call it when the user asks what they should be doing, what is outstanding, or at the start of a working session.' This clearly tells the agent when to use the tool. It doesn't explicitly exclude alternatives, but the siblings are semantically distinct (they are data-modifying actions), so the guidance is sufficient. A 5 would require explicit 'when not to use' or contrast with siblings, which is missing.
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.
4 tool updates
v0.1.0- First observed
add_project - First observed
capture - First observed
mark_done - First observed
shortlist
TDQS
Scored across 4 tools
Each tool has a clearly distinct role: capture saves items, shortlist shows priorities, add_project creates routing targets, and mark_done changes item state. No two tools could plausibly be confused for the same operation.
All tool names are lowercase imperative verbs, with compound names using underscores (add_project, mark_done). The naming pattern is uniform and predictable across the set.
Four tools cover the full capture-to-completion loop without redundancy. The count is well-matched to the server's focused personal-information-management purpose.
The core workflow (capture, route, shortlist, mark done) is fully covered. A minor gap is the lack of a way to browse or search all captured items that fall off the shortlist, but this is workable for the stated use case.
Maintenance
Related MCP Connectors
Brain dump, routines, task planning, focus, and instant thought retrieval
Your unified inbox — everything that reaches you, understood and actionable from your AI assistant.
A self-improving memory layer. Your memory, notes, tasks and goals, remembered everywhere.
Voice notes that organize themselves. Capture by Siri, AI auto-tags, semantic search retrieves.
Related MCP Servers
- AlicenseBqualityFmaintenanceProvides an agent-first note-taking system designed from the ground up for AI collaboration. Organizes your notes as a local vault of ordinary markdown files with semantic note types.287 npm10MIT
- FlicenseBqualityDmaintenanceEnables indexing and retrieving notes with full-text search using SQLite, plus building knowledge graphs to find relationships between concepts. Supports natural language note management, tagging, and semantic connections.16-
- AlicenseNot gradedqualityBmaintenanceTurns an LLM agent into a personal planner by providing atomic context (roles, goals, decision matrix) and routing classified items to Obsidian, with optional projection to Google Calendar and Tasks.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read and write to a personal knowledge vault of markdown notes, projects, and tasks, with tooling for search, capture, daily logs, and project management across different AI tools.MIT