Skip to main content
Glama
alameddinc

compy-mcp

by alameddinc

compy-mcp

Let your AI agent search and read the notes you captured on the web with Compy.

Compy is a local-first Chrome extension for highlighting and note-taking on any web page. compy-mcp is a Model Context Protocol server that exposes those notes to an MCP client (Claude Code, Claude Desktop, …) so your agent can pull the relevant highlights and tasks on demand — no copy-paste.

100% local. Read-only. No account, no network — it just reads a JSON file that Compy writes on your machine.

How it works

Compy (browser)  ──"Sync for AI"──▶  ~/Downloads/compy/compy-export.json
                                              │  (watched)
                                       compy-mcp (stdio)
                                              │  tools + resources
                                        Claude Code / any MCP client
  1. In Compy's dashboard, open the Copy for AI menu → Sync for AI. This writes ~/Downloads/compy/compy-export.json. Re-run it whenever you want the agent to see your latest notes.

  2. Register this server with your MCP client (below).

  3. Ask your agent things like "check Compy for anything I flagged on the billing page" — it calls search_notes and gets your notes, quotes, tags and URLs.

Related MCP server: Bruin

Install

Requires Node 18+.

Claude Code

claude mcp add compy -- npx -y compy-mcp

Claude Desktop / other clients

Add to your MCP config:

{
  "mcpServers": {
    "compy": { "command": "npx", "args": ["-y", "compy-mcp"] }
  }
}

Pin a project to one site (optional)

If you work across several sites, bind a project's server to one site with COMPY_SITE so search_notes / list_tasks default to it (the agent doesn't have to know which site your notes are on):

claude mcp add compy -e COMPY_SITE=https://app.example.com -- npx -y compy-mcp

Pass site: "*" in any call to search across all sites anyway. Without COMPY_SITE, everything is unfiltered by default — the agent searches by keywords and can call list_sites to discover what's available.

Custom file location

By default it reads ~/Downloads/compy/compy-export.json. Override with an env var or flag:

COMPY_FILE=/path/to/compy-export.json npx compy-mcp
# or
npx compy-mcp --file /path/to/compy-export.json

Tools

Tool

What it does

search_notes

Ranked keyword search over note text, quotes, titles and tags. Filter by site / label.

list_tasks

List notes/tasks, optionally filtered by site / label.

list_sites

Sites you have notes on, with counts. Good first call.

get_note

Fetch one note by id.

get_markdown

Render notes as a Markdown task list (optionally scoped to a site).

Resource: compy://sites — overview of sites + counts.

Why keyword search, not embeddings?

The note set is small (tens to a few hundred short notes) and the calling model is the semantic layer — it reasons over what search_notes returns. Fast substring/token ranking is plenty at this scale and keeps everything local, with zero setup and no API keys.

License

MIT

Available Tools

5 tools
get_markdownGet Markdown task listC

Render the notes as a ready-to-read Markdown task list, optionally scoped to one site.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNoOrigin or host to scope to

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It does not mention if the tool is read-only, modifies data, requires authentication, or what it returns. 'Render' is vague regarding side effects.

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 sentence that is front-loaded with the main action and includes optional scope. No wasted words, but could be slightly more informative without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one optional parameter and no output schema, yet the description omits what 'notes' refers to, how the Markdown is returned, or any limitations. Incomplete for a tool with sparse structured information.

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%, baseline is 3. The description adds only that scoping is optional, which is already implied by the parameter not being required. No additional format or constraint details.

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 clearly states the tool renders notes as a Markdown task list with optional site scoping, differentiating from siblings like 'get_note' and 'list_sites', though not explicitly contrasting with 'list_tasks'.

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?

No guidance on when to use this tool versus siblings such as 'list_tasks' or 'search_notes'. The description only explains functionality without usage context or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_noteGet one noteA

Fetch a single note/task by its id (as returned by search_notes / list_tasks).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe note id

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It only states the basic fetch action, with no disclosure of side effects, error handling, authorization needs, or rate limits.

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 efficiently conveys the purpose and context with no wasted words.

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 one-parameter fetch tool with no output schema, the description provides adequate context. It could be enhanced by noting the return format, but it is functionally complete.

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 description adds value beyond the schema by specifying the id's source (search_notes/list_tasks), aiding correct selection. Schema coverage is 100%, baseline 3, so this slight addition justifies a 4.

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?

The description clearly states the tool fetches a single note/task by its id, with a reference to whence the id comes (search_notes/list_tasks), distinguishing it from siblings like get_markdown.

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 description implies the tool is used when you have an id from search_notes/list_tasks, but lacks explicit guidance on when to use or avoid it, e.g., versus get_markdown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitesList sitesA

List the sites the user has notes on, with a count each. Good first call to see what's available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description indicates read-only listing behavior with counts. No mention of side effects or limits, but adequate for a basic tool.

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?

Single sentence, front-loaded with action, no wasted words. Efficiently conveys purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, annotations, or output schema, description fully covers purpose and usage hint. Complete for a simple listing tool.

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?

No parameters exist; schema coverage is 100%. Description adds no parameter info, but baseline for 0 params is 4.

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?

Clearly states the verb 'List' and resource 'sites' with qualifier 'the user has notes on, with a count each'. Differentiates from siblings like search_notes and get_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes 'Good first call to see what's available', advising when to use it as an initial step. Lacks explicit exclusions but sufficient 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.

list_tasksList Compy tasksA

List captured notes/tasks, optionally filtered by site or tag. Use when you want the full set rather than a keyword search.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNoFilter by origin or host
labelNoFilter by tag/label
limitNoMax results (default 100)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behavioral traits. It mentions optional filters but does not explain behavior like default ordering, pagination (limit is mentioned but not explained), or what 'captured' means. Basic transparency, but gaps remain.

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?

Two sentences, no filler, no redundancy. Information is front-loaded with the core action and optionality.

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?

For a tool with 3 parameters and no output schema, the description is somewhat complete but lacks detail on return format, pagination behavior, and what constitutes 'captured'. Could improve by specifying output structure.

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 baseline is 3. Description adds little beyond schema, only rephrasing 'site' and 'label' as 'site or tag'. No additional semantic context for parameters.

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?

Description clearly states it lists captured notes/tasks with optional filtering by site or tag, and distinguishes from sibling 'search_notes' by specifying 'full set' vs keyword search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to use ('when you want the full set rather than a keyword search'), effectively differentiating from the sibling tool 'search_notes', though no exclusions or alternatives beyond that are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_notesSearch Compy notesA

Search the highlights, notes and tasks the user captured on the web. Pass keywords from what you're working on to pull the relevant ones. Returns ranked matches with note text, highlighted quote, tag, URL and origin.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNoLimit to one site by origin (https://app.example.com) or host (app.example.com)
labelNoLimit to one tag/label, e.g. Bug, Idea, For AI
limitNoMax results (default 20)
queryYesKeywords or a phrase to match against note text, quotes, titles and tags

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description explains that the tool returns ranked matches and lists the output fields, indicating a read-only operation. It does not disclose potential side effects or limitations, but the search nature implies safe usage.

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?

Two sentences cover what the tool does, how to use it, and what it returns. No unnecessary information; the description is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides sufficient information to understand the tool's purpose, input parameters, and return structure without needing an output schema. It covers all key aspects for an agent to invoke it correctly.

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?

All four parameters are fully described in the schema (100% coverage). The tool description adds value by explaining how to use the query parameter ('pass keywords from what you're working on') and summarizing return fields, which complements the schema.

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?

The description clearly states the tool searches highlights, notes, and tasks captured on the web, and specifies the return fields (note text, quoted, tag, URL, origin). It effectively distinguishes itself from sibling tools like get_markdown or list_sites by focusing on search across these items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises to pass keywords from current work to find relevant notes, providing clear usage context. It does not explicitly state when not to use or list alternatives, but the context and sibling names imply appropriate use cases.

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. 5 tool updatesv0.1.0
    • First observedget_markdown
    • First observedget_note
    • First observedlist_sites
    • First observedlist_tasks
    • First observedsearch_notes

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: rendering a markdown list, fetching a single note by ID, listing sites with counts, listing tasks with filters, and searching notes by keywords. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: get_markdown, get_note, list_sites, list_tasks, search_notes. This pattern is predictable and clear.

Tool Count5/5

With 5 tools covering listing, searching, fetching, and rendering, the count is well-scoped for a read-only note retrieval server. It is neither too few nor too many.

Completeness4/5

The tool set provides complete coverage for reading and searching notes (list, search, get, render). However, it lacks any write operations (create, update, delete), which may be intentional but represents a gap for full note management.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.
    1 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that provides semantic memory with search, related-content traversal, and write-back capabilities, all powered by local embeddings of your notes, documents, and chat histories.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for managing a local, domain-agnostic knowledge base using Markdown notes with frontmatter. Enables AI agents to capture, read, search, link, and maintain notes with atomic writes and privacy controls.
    13
    MIT