Practitioner Knowledge MCP
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., "@Practitioner Knowledge MCPSave an idea about using scenario planning to stress-test municipal budgets"
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.
Practitioner Knowledge MCP
A personal knowledge base for Claude, built for practitioners, not programmers.
Why this exists
Chat sessions forget. Your best ideas and the methods you use to test them end up scattered across notes, slide decks, and old conversations. Each new chat starts from zero.
The Model Context Protocol (MCP) lets Claude read from and write to a store that you own, on a machine you control. You keep the knowledge; Claude gets a memory it can search.
Most MCP templates assume a software engineer. This one assumes a domain expert: an economist, a planner, a policy analyst, a consultant. Every step says what to type, where to type it, and what you should see.
Related MCP server: KARP Graph Lite
What you get
Eight tools that Claude can call:
Tool | What it does |
| Saves an idea: the problem it addresses, your insight, and the assumptions it rests on |
| Shows one idea in full |
| Changes any part of an idea as your thinking matures |
| Full-text search across everything, best match first |
| Browses ideas by domain, tag, or status |
| Counts by domain and status, and your most used tags |
| Lists your reusable analytical methods |
| Brings one method into the conversation |
Two ways to run it:
Local. Claude Desktop starts the server on your Mac when it opens.
Always on. A Mac mini serves one knowledge base to every device you own, over a private Tailscale network.
Your data in one file. Ideas live in a single SQLite database on your Mac. Frameworks are plain Markdown files you edit in any text editor and keep in git.
Who it is for
For: economists, planners, policy analysts, consultants, researchers, writers, and anyone whose work runs on ideas and methods that build over years.
Not for:
Teams. It has one user and no accounts or permissions.
Hosted services. It is not built to run in the cloud for others.
Anything that needs to be reachable from the public internet. It is designed to stay private.
How it works
flowchart LR
subgraph Laptop["Your laptop"]
CD1["Claude Desktop"] -- stdio --> BR["mcp-remote bridge"]
end
subgraph Mini["Your Mac (local or always-on Mac mini)"]
CD2["Claude Desktop"] -- stdio --> S1["Knowledge server"]
S2["Knowledge server<br/>(HTTP service)"]
S1 --> DB[("ideas.db<br/>SQLite")]
S2 --> DB
S1 --> FW["frameworks/<br/>Markdown files"]
S2 --> FW
end
BR -- "HTTP + token<br/>over Tailscale" --> S2Claude Desktop starts the knowledge server and talks to it directly, with no network involved. On an always-on Mac mini, the same server also runs as a background service that other devices reach through Tailscale, a private network of your own machines. Both paths read and write the same database file.
Quickstart (about 15 minutes)
This is the short version. The full guide, with a fix for every common problem, is docs/01-quickstart-local.md.
Prerequisites
Open Terminal (Applications, then Utilities) and check each one:
Need | Check | Expected |
A current macOS |
| A version number, such as |
git |
|
|
uv |
|
|
Claude Desktop | Open it | You can start a chat |
No uv? Install it, then open a new Terminal window:
curl -LsSf https://astral.sh/uv/install.sh | shYou do not need to install Python. uv installs the right version for this project and keeps it separate from anything else on your Mac.
Install
mkdir -p ~/dev && cd ~/dev
git clone https://github.com/OWNER/practitioner-knowledge-mcp.git
cd practitioner-knowledge-mcp
make installExpected, at the end:
Resolved 48 packages in 20ms
Installed 45 packages in 1.2sCreate the database and add sample ideas
make init-db
make seedExpected:
Database ready: /Users/you/.knowledge-mcp/ideas.db
Schema version: 1. Ideas stored: 0.
...
Inserted: 12. Skipped (already present): 0.
Ideas stored: 12.The 12 sample ideas are fictional, across four subjects: urban systems, supply chains, public finance, and strategy.
Test it
make smokeThis starts the server the way Claude Desktop will and calls every read-only tool. Expected, at the end:
PASS database 12 ideas
12 passed, 0 failed.Optional: make inspect opens MCP Inspector in your browser so you can click
through the tools by hand. It needs Node.js (brew install node). If the first
connection times out, click Retry.
Connect to Claude Desktop
Claude Desktop keeps its list of servers in
~/Library/Application Support/Claude/claude_desktop_config.json. The entry
for this server looks like
examples/claude_desktop_config.stdio.json:
{
"mcpServers": {
"practitioner-knowledge": {
"command": "/Users/you/.local/bin/uv",
"args": ["--directory", "/Users/you/dev/practitioner-knowledge-mcp",
"run", "knowledge-mcp", "--transport", "stdio"],
"env": { "KNOWLEDGE_MCP_DB": "/Users/you/.knowledge-mcp/ideas.db" }
}
}
}docs/02-connect-claude-desktop.md has a one-paste command that adds this entry for you, fills in your paths, keeps any servers you already have, and backs up the file first.
Then quit Claude Desktop with Cmd-Q (closing the window is not enough) and reopen it. In a new chat, ask:
Use practitioner-knowledge to search my ideas for supply chain.
A correct answer describes three sample ideas: supplier lead-time variance, inventory buffers at the chokepoint, and dual sourcing as insurance. If Claude Desktop reports a timeout the very first time, click Retry; uv was still setting up.
Make it yours
Clear out the samples. Archive them, so they stay out of your way:
Use practitioner-knowledge to set the status of ideas 1 through 12 to archived.
Or start a fresh database: quit Claude Desktop, move
~/.knowledge-mcp/ideas.db to a backup folder, and run make init-db.
Choose your domains and tags. There is no fixed list. A domain is the field
an idea belongs to (public finance); tags cut across fields (incentives,
measurement). Pick a few domains you return to often and stay consistent.
Ask for idea_stats now and then to see what you actually use.
Use the structure. Every idea has a problem (the puzzle), an insight (your answer or mechanism), and optional assumptions (what must hold for it to work). Writing the assumptions down is what makes an idea testable later.
Write your own frameworks. Copy one of the three samples in frameworks/
and edit it. Claude can use it immediately. See
docs/06-write-your-own-frameworks.md.
Add a custom tool. A plugin is one Python file of about 20 lines, loaded without touching the project's code. See docs/05-add-your-own-tools.md.
Optional: an always-on Mac mini
Why bother: one database that every device reads and writes, available even when your laptop is asleep or traveling. Two copies on two laptops drift apart; one copy on one host does not.
On the Mini, after the Quickstart:
sudo pmset -a sleep 0 # never sleep
sudo pmset -a autorestart 1 # restart after a power failure
deploy/macos/install_launchd.sh install server # install the background service
curl -s http://127.0.0.1:8765/healthz # check itExpected from the last two:
Created token: /Users/you/.knowledge-mcp/token (readable only by you)
Installed /Users/you/Library/LaunchAgents/com.example.knowledge-mcp.plist
Server is up: http://127.0.0.1:8765/healthz
{"status":"ok"}The service starts when you log in and restarts itself within seconds if it stops. It requires an access token, kept in a file only you can read. The full guide, including what happens after a power cut, is docs/03-always-on-mac-mini.md.
Optional: reach it from your laptop
Tailscale connects your devices in a private, encrypted network, wherever they are. The Mini's service listens only on its Tailscale address, so nothing outside your own devices can reach it.
Claude Desktop on the laptop connects through mcp-remote, a small bridge that turns Claude Desktop's local connection into an HTTP request and adds your token from a private file. The entry looks like examples/claude_desktop_config.remote.json:
"practitioner-knowledge": {
"command": "/opt/homebrew/bin/npx",
"args": ["-y", "mcp-remote@0.14.3", "http://100.101.102.103:8765/mcp",
"--transport", "http-only", "--allow-http",
"--header-file", "/Users/you/.knowledge-mcp/remote-headers"]
}docs/04-remote-access-tailscale.md walks through it in eight steps, with a check after each one.
Lessons learned from running this daily
Keep one database on one host. Two copies on two machines will drift, and merging them later costs real time.
Pin releases on the always-on host. Build and test a new version on another Mac first. The service runs only what you installed and never upgrades itself.
Back up before every upgrade with
scripts/backup_db.sh, and put the host on a UPS. A power cut in the middle of a write is the most likely way to damage the database.Frameworks belong in git; ideas belong in the database. Methods change slowly and deserve history. Ideas grow one conversation at a time.
Security: read before you run it
It binds to localhost by default. The HTTP service listens only on
127.0.0.1unless you choose otherwise. It refuses0.0.0.0, and it refuses any non-local address without an access token.Never expose it to the public internet. Use Tailscale for remote access. Do not forward router ports to it or publish it with Tailscale Funnel.
MCP servers can be a prompt-injection path. Whatever Claude reads through a tool, including a framework someone sent you, can contain instructions. Only connect tools you trust, read frameworks before adding them, and approve write tools one call at a time.
No telemetry. The project collects no usage data, sends nothing to the maintainer, and makes only the read-only version checks listed below. Those checks run only in the maintenance checkup, when you run or schedule it: package versions from the PyPI JSON API, this project's releases from the GitHub releases API, Python releases from python.org, and known vulnerabilities through
pip-audit.Keep private material out of any fork you publish. List private names in
.private-terms.txt;scripts/check_private.shscans every file and the full git history for them.
Details: docs/08-security.md. To report a vulnerability, see SECURITY.md.
FAQ
Does it work on Windows? Not officially. The server is plain Python, but the setup scripts and the always-on service are macOS only.
Can I use other AI apps? Yes, any app that supports MCP servers over stdio or Streamable HTTP, such as Claude Code.
Does my data leave my Mac? The database does not. But anything Claude reads through a tool becomes part of your conversation with Claude, under your Claude plan's privacy terms.
Can I import existing notes? Not with a built-in command yet. Paste notes into a chat and ask Claude to store them, or write a short import script.
How big can it get? Titles up to 200 characters, text fields up to 20,000, and 20 tags per idea. SQLite handles millions of ideas.
Is it encrypted? Turn on FileVault to encrypt the disk. Remote traffic runs inside Tailscale's encryption.
Can I sync the database across Macs? Do not sync the live file through iCloud or Dropbox. Keep one always-on host and connect to it.
More: docs/faq.md.
Roadmap
Import ideas from Markdown or CSV files
A tool to rename and merge tags
Optional semantic search with embeddings, alongside full-text search
Export ideas to Markdown
Contributing
Small, focused pull requests are welcome. Please read
CONTRIBUTING.md first. Run make check before you open a
pull request; it runs the tests, the linter, and the secret scan. For setup
questions, use the setup help issue template rather than a bug report.
Support this project
If this kit saves you time, you can sponsor its upkeep through GitHub Sponsors. Sponsorships are not tax-deductible donations, and they do not buy support or change its terms: help is best effort, as described in SUPPORT.md.
License, acknowledgments, disclaimer
Licensed under the Apache License 2.0.
Built on the Model Context Protocol and its official Python SDK, with uv, SQLite, and Tailscale.
Provided as is, without warranty of any kind. You are responsible for your own data and backups.
Available Tools
8 toolsget_frameworkGet frameworkARead-only
Return one framework's details and its full Markdown text.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Framework name as shown by list_frameworks. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and locality are covered structurally. The description usefully discloses that the response includes full Markdown text (not just metadata), but says nothing about not-found behavior or size of the payload.
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?
A single sentence with no filler, front-loading the resource and the notable payload detail. Nothing is wasted and nothing important is buried.
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?
With an output schema present, the description need not explain return fields, and it correctly flags the Markdown body as part of the result. It is nearly complete, missing only a hint about how names are matched or what happens on an unknown name.
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% and there is a single parameter, so the schema already documents that 'name' is the framework name from list_frameworks. The description adds no format or matching semantics beyond that, so the baseline 3 applies.
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?
States a specific verb and resource ('Return one framework's details and its full Markdown text'), clearly a single-item fetch rather than a list. It does not explicitly name list_frameworks as the sibling it contrasts with, so the reader must infer the single-vs-many distinction from the word 'one'.
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?
Usage is implied by 'one framework's details', and the schema's name field points at list_frameworks as the way to discover names, but the description itself gives no explicit when-to-use or when-not-to-use guidance. Adequate but minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ideaGet ideaCRead-only
Return the full record for one idea.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The idea's id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond annotations or schema - no note on behavior when the id does not exist, no error semantics - so it contributes little behavioral context.
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?
A single well-formed sentence with no filler, and the core action is front-loaded. It is arguably under-specified rather than over-long, but it wastes nothing.
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?
With an output schema present the description need not enumerate return fields, and annotations cover the read-only profile, so the minimal text is passable. However, for a retrieval-by-id tool it omits any handling note for missing/invalid ids, leaving a modest gap.
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% for the single 'id' parameter (minimum 1), so the schema fully documents it. The description adds no format, range, or sourcing detail beyond what the schema provides, which is the expected baseline when the schema does the work.
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 gives a clear verb+resource pair ('Return the full record for one idea'), and the singular 'one idea' implicitly distinguishes it from list_ideas and search_ideas. It does not name any sibling explicitly, so the differentiation is inferential rather than stated.
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?
There is no explicit when-to-use guidance, no mention of prerequisites (e.g., that a valid id must be obtained first), and no routing to alternatives such as search_ideas or list_ideas. Usage must be inferred entirely from the tool name and singular phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
idea_statsIdea statisticsARead-only
Return the total number of ideas, counts by domain and by status, and the most-used tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the categories of computed output, but since an output schema exists, much of that restates structured data rather than adding new behavioral context such as freshness, live-vs-cached computation, or cost.
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?
A single sentence that front-loads the verb and lists the returned aggregates with zero filler. Every clause carries information about what the caller gets.
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 zero-parameter read-only aggregate tool with an output schema defining the return shape, the description covers what is needed to call it correctly. The only omission is guidance on when to choose it over list_ideas/search_ideas, which is a minor gap.
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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4. The schema confirms an empty argument object, so no gap exists.
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 ('Return') and resource, and enumerates exactly what is computed: total ideas, counts by domain, counts by status, and most-used tags. That aggregate nature inherently separates it from siblings like get_idea and list_ideas, but it never names or contrasts those siblings explicitly, so it stops short of a 5.
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?
Usage is only implied: an agent can infer this is for summarized/aggregate views rather than enumerating ideas, but the description gives no explicit when-to-use, no statement of when list_ideas or search_ideas is preferable, and no note on whether filters apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_frameworksList frameworksARead-only
List the analytical frameworks available, with each one's name, title, category, and when to use it.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Only this category. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is settled. The description adds the shape of each returned record but says nothing about pagination, volume limits, or ordering behavior for a list endpoint.
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?
One front-loaded sentence with no filler; the verb and resource lead and the returned fields follow. It is tight, though the return-field enumeration overlaps with what the output schema likely already provides.
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?
An output schema exists, so return values need no elaboration, and the category parameter is documented in the schema. For a simple zero-required-parameter list tool, the description is nearly sufficient; only usage routing to get_framework is missing.
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% ('Only this category.'), so the schema already explains the single optional category filter. The description adds no meaning beyond that, which is the baseline for fully covered schemas.
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?
States a specific verb ('List') and resource ('analytical frameworks'), and enumerates what each entry contains, which distinguishes it from the singular get_framework sibling. It does not name the sibling explicitly, but the singular/plural pair makes the split obvious.
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?
Usage is only implied: an agent can infer this is the discovery call before get_framework, but the description never says when to use it instead of get_framework or search_ideas. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ideasList ideasARead-only
List ideas, newest first, optionally filtered by domain, tag, or status.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | Maximum results, 1 to 100. | |
| domain | No | ||
| offset | No | Results to skip, for paging. | |
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds the 'newest first' ordering trait, which is useful beyond the annotations, but says nothing about pagination behavior or what the result set looks like.
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?
A single front-loaded sentence with zero waste; verb, ordering, and filter list are all delivered immediately.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description covers ordering and filters adequately, leaving only minor gaps around parameter detail and sibling routing.
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 40% (only limit and offset are documented in the schema). The description names the three filter parameters (domain, tag, status) but adds no matching semantics, format, or value meaning beyond the bare names already visible in the schema.
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?
States a specific verb ('List') and resource ('ideas') and adds ordering ('newest first') plus the filterable dimensions. However, it does not distinguish this from the sibling search_ideas, which an agent could reasonably confuse with filtered listing.
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?
'Optionally filtered by domain, tag, or status' implies when the tool is useful, but there is no explicit when-to-use vs. search_ideas guidance, nor any exclusion conditions. Usage is left partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ideasSearch ideasARead-only
Full-text search across titles, domains, problems, insights, assumptions, and tags.
Results are ranked best match first and include a snippet with matched words in
[brackets]. If no idea contains every word, ideas containing any word are returned
instead, and each result's matched field says which rule applied.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results, 1 to 100. | |
| query | Yes | Words to look for. | |
| domain | No | Only search this domain. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnlyHint and openWorldHint. The description adds rich behavioral detail beyond that: ranking order (best match first), snippet format with [brackets], and the AND-to-OR fallback behavior with a `matched` field indicating the rule applied. This fallback behavior is unusual and valuable to disclose.
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?
Three sentences, no filler. Front-loads the search scope, then ranking and snippet, then the fallback rule. Every sentence earns its place.
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?
An output schema exists so return values need not be explained, and the description still usefully covers ranking, snippet format, and fallback semantics. Only the lack of explicit alternative-tool routing keeps it from being fully complete.
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 parameters are fully documented in the schema. The description does not add syntax or format details for query/limit/domain, so baseline 3 applies.
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?
States a specific verb (full-text search) and enumerates the exact fields searched (titles, domains, problems, insights, assumptions, tags). This clearly distinguishes it from list_ideas and get_idea among siblings.
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?
Usage is implied by 'full-text search' versus the list/get siblings, but there is no explicit when-to-use or when-not-to-use guidance, no mention of when to prefer list_ideas or idea_stats instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_ideaStore ideaB
Save a new idea to the knowledge base. Returns its id and the stored record.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Up to 20 short tags. | |
| title | Yes | Short title, 3 to 200 characters. | |
| domain | Yes | Subject area, such as 'public finance'. | |
| status | No | Maturity of the idea. | seed |
| insight | Yes | The proposed answer or mechanism. | |
| problem | Yes | The puzzle or question the idea addresses. | |
| assumptions | No | Baseline assumptions the idea depends on. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the agent knows this is a non-destructive write operation. The description adds that it returns the id and stored record. However, it doesn't mention permission requirements, rate limits, or what happens on duplicate titles. With annotations covering safety, this is adequate but not rich.
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 concise sentences that front-load the core action and then note the return value. No wasted words, though the second sentence is somewhat redundant given the output schema.
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?
The tool has 7 parameters, an output schema, and annotations, so the description doesn't need to explain return values in detail. However, it lacks usage guidance and behavioral nuances like validation rules or error handling. It is minimally complete but leaves gaps.
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%, so all parameters are fully documented in the schema. The description adds no extra parameter semantics beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.
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 and resource: 'Save a new idea to the knowledge base.' An agent can distinguish this from siblings like get_idea or update_idea, though it doesn't explicitly contrast with them. The purpose is clear but lacks sibling differentiation.
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 offers no guidance on when to use this tool versus alternatives such as update_idea (for existing ideas) or search_ideas. There is no mention of prerequisites or context. This is a significant gap for a creation tool with multiple related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ideaUpdate ideaB
Change one or more fields of an existing idea. Omitted fields stay as they are. Returns the updated record.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The idea's id. | |
| tags | No | Replaces the existing tags. | |
| title | No | ||
| domain | No | ||
| status | No | ||
| insight | No | ||
| problem | No | ||
| assumptions | No | Pass an empty string to clear. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: partial-update semantics ('Omitted fields stay as they are') clarify that unspecified fields are preserved rather than nulled. It says nothing about required permissions, irreversibility, or the special clearing behavior the schema mentions for some fields.
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?
Three short sentences, front-loaded with the core action and the partial-update rule. Slightly clipped by the trailing 'Returns the updated record', which restates information already available in the output schema.
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?
The output schema exists, so the description is not obligated to explain return values, and the patch semantics are covered. But for an 8-parameter mutation tool at 38% schema coverage, the definition omits field-level guidance and the note that some fields (e.g. tags) are replaced wholesale rather than merged, leaving real gaps.
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 only 38% for 8 parameters, so the description carries the burden of compensating and does not: it never enumerates the updatable fields (title, domain, status, insight, problem, assumptions), so field-level meaning is missing. The only useful addition is the generic 'omitted fields stay' rule, which does not resolve which fields can be set or how to clear them.
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?
States a specific verb and resource ('Change one or more fields of an existing idea'), which an agent can immediately distinguish from the read siblings (get_idea, list_ideas) and the create sibling (store_idea). It does not name those siblings explicitly, so it stops short of full differentiation.
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 wording implies the appropriate context (modifying an already-existing idea), and the PATCH-style contract signals that this is the tool for partial edits rather than recreate-and-replace. However, it never names an alternative or states an exclusion, so the routing guidance is only implied.
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.
8 tool updates
v0.1.0- First observed
get_framework - First observed
get_idea - First observed
idea_stats - First observed
list_frameworks - First observed
list_ideas - First observed
search_ideas - First observed
store_idea - First observed
update_idea
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: idea-level CRUD/stats/search/list versus framework-level retrieval/list. The only possible overlap between list_ideas and search_ideas is resolved by descriptions emphasizing filtered listing versus full-text ranked search. Agents should not confuse these tools.
Most names follow a predictable verb_noun snake_case pattern (get_idea, store_idea, update_idea, search_ideas, list_ideas, get_framework, list_frameworks). The only deviation is idea_stats, which uses noun_stats instead of a verb-first pattern, but it remains readable and consistent with snake_case.
Eight tools is well-scoped for a practitioner knowledge base covering ideas and frameworks. Each tool earns its place by handling a distinct operation without excessive fragmentation.
The idea lifecycle covers create, read, update, list, search, and stats, which supports core workflows. A delete_idea operation is missing, and frameworks are read-only, but these are minor gaps given the likely reference-data nature of frameworks.
Maintenance
Related MCP Connectors
- TaprootOAuthcom.taproothq
Persistent memory layer for AI tools. Save and recall notes across Claude and other MCP clients.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
- Knowledge BaseOAuthai.b77
A searchable knowledge base your assistant reads and writes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides Claude with persistent local memory and a structured knowledge graph for tracking project states, task dependencies, and historical context. It enables users to store notes, manage task relationships, and perform time-travel queries to reconstruct past information without relying on cloud services.MIT
- FlicenseNot gradedqualityCmaintenanceProvides Claude Desktop with persistent, structured memory and semantic search via a local SQLite knowledge graph, plus a web UI for visualization and management.-
- AlicenseAqualityCmaintenanceEnables personal knowledge management through Claude Desktop, allowing users to capture thoughts, connect ideas, and reflect on thinking changes via natural conversation.723MIT
- AlicenseNot gradedqualityDmaintenanceProvides persistent, searchable memory for Claude Code using local SQLite, semantic embeddings, and full-text search, enabling Claude to recall and retrieve context across sessions and projects without external services.15 npm4MIT