Skip to main content
Glama
econmatrix007

Practitioner Knowledge MCP

Practitioner Knowledge MCP

A personal knowledge base for Claude, built for practitioners, not programmers.

License: Apache 2.0 CI Python 3.12+ MCP Python SDK 2.x

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

store_idea

Saves an idea: the problem it addresses, your insight, and the assumptions it rests on

get_idea

Shows one idea in full

update_idea

Changes any part of an idea as your thinking matures

search_ideas

Full-text search across everything, best match first

list_ideas

Browses ideas by domain, tag, or status

idea_stats

Counts by domain and status, and your most used tags

list_frameworks

Lists your reusable analytical methods

get_framework

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" --> S2

Claude 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

sw_vers -productVersion

A version number, such as 15.6

git

git --version

git version 2.x (if macOS offers to install developer tools, accept)

uv

uv --version

uv 0.8 or newer

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 | sh

You 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 install

Expected, at the end:

Resolved 48 packages in 20ms
Installed 45 packages in 1.2s

Create the database and add sample ideas

make init-db
make seed

Expected:

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 smoke

This 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 it

Expected 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.1 unless you choose otherwise. It refuses 0.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.sh scans 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 tools
get_frameworkGet frameworkA
Read-only

Return one framework's details and its full Markdown text.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFramework name as shown by list_frameworks.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ideaC
Read-only

Return the full record for one idea.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe idea's id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 statisticsA
Read-only

Return the total number of ideas, counts by domain and by status, and the most-used tags.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 frameworksA
Read-only

List the analytical frameworks available, with each one's name, title, category, and when to use it.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOnly this category.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ideasA
Read-only

List ideas, newest first, optionally filtered by domain, tag, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
limitNoMaximum results, 1 to 100.
domainNo
offsetNoResults to skip, for paging.
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ideasA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results, 1 to 100.
queryYesWords to look for.
domainNoOnly search this domain.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoUp to 20 short tags.
titleYesShort title, 3 to 200 characters.
domainYesSubject area, such as 'public finance'.
statusNoMaturity of the idea.seed
insightYesThe proposed answer or mechanism.
problemYesThe puzzle or question the idea addresses.
assumptionsNoBaseline assumptions the idea depends on.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe idea's id.
tagsNoReplaces the existing tags.
titleNo
domainNo
statusNo
insightNo
problemNo
assumptionsNoPass an empty string to clear.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 8 tool updatesv0.1.0
    • First observedget_framework
    • First observedget_idea
    • First observedidea_stats
    • First observedlist_frameworks
    • First observedlist_ideas
    • First observedsearch_ideas
    • First observedstore_idea
    • First observedupdate_idea

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables personal knowledge management through Claude Desktop, allowing users to capture thoughts, connect ideas, and reflect on thinking changes via natural conversation.
    7
    23
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 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 npm
    4
    MIT