Skip to main content
Glama

mcp-canon

Universal MCP knowledge server for LLM agents, powered by local RAG.

Use Canon to provide domain-specific best practices and playbooks across software engineering, marketing, video editing, and other knowledge areas.

Typical workflows:

  • Find the most suitable guide for a task

  • Retrieve concise best-practice snippets

  • Read full guides for deeper execution context


Quick Start

Go to: Settings -> Cursor Settings -> MCP -> Add new global MCP server

Pasting the following configuration into your Cursor ~/.cursor/mcp.json file is the recommended approach. You may also install in a specific project by creating .cursor/mcp.json in your project folder. See Cursor MCP docs for more info.

Cursor Local Connection

{
  "mcpServers": {
    "canon": {
      "command": "uvx",
      "args": ["mcp-canon"]
    }
  }
}

Cursor Local Connection With Custom Database

{
  "mcpServers": {
    "canon": {
      "command": "uvx",
      "args": ["mcp-canon"],
      "env": {
        "CANON_DB_PATH": "/path/to/my-db"
      }
    }
  }
}

Cursor Remote Server Connection

{
  "mcpServers": {
    "canon": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

Run this command. See Claude Code MCP docs for more info.

Claude Code Local Connection

claude mcp add --scope user canon -- uvx mcp-canon

Cursor Local Connection With Custom Database

claude mcp add --scope user -e CANON_DB_PATH=/path/to/my-db canon -- uvx mcp-canon

Claude Code Remote Server Connection

claude mcp add --scope user --transport http canon http://localhost:8080/mcp

Remove --scope user to install for the current project only.

Add this to your Opencode configuration file. See Opencode MCP docs for more info.

Opencode Local Connection

{
  "mcp": {
    "canon": {
      "type": "local",
      "command": ["uvx", "mcp-canon"],
      "enabled": true
    }
  }
}

Opencode Local Connection With Custom Database

{
  "mcp": {
    "canon": {
      "type": "local",
      "command": ["uvx", "mcp-canon"],
      "enabled": true,
      "environment": {
        "CANON_DB_PATH": "/path/to/my-db"
      }
    }
  }
}

Opencode Remote Server Connection

"mcp": {
  "context7": {
    "type": "remote",
    "url": "http://localhost:8080/mcp",
    "enabled": true
  }
}

Run this command. See Gemini CLI MCP docs for more info.

Gemini CLI Local Connection

gemini mcp add --scope user canon uvx mcp-canon

Gemini CLI Local Connection With Custom Database

gemini mcp add --scope user -e CANON_DB_PATH=/path/to/my-db canon uvx mcp-canon

Gemini CLI Remote Server Connection

gemini mcp add --scope user --transport http canon http://localhost:8080/mcp

Remove --scope user to install for the current project only.

Go to the agent panel and open: ... -> MCP Servers -> Manage MCP Servers -> View raw config. Add this to your mcp_config.json file. See Google Antigravity MCP docs for more info.

Google Antigravity Local Connection

{
  "mcpServers": {
    "canon": {
      "command": "uvx",
      "args": ["mcp-canon"]
    }
  }
}

Google Antigravity Local Connection With Custom Database

{
  "mcpServers": {
    "canon": {
      "command": "uvx",
      "args": ["mcp-canon"],
      "env": {
        "CANON_DB_PATH": "/path/to/my-db"
      }
    }
  }
}

Related MCP server: sourcebook

Create and index your own guides

Complete workflow from installation to running with your own domain guides.

Step 1: Install with indexing support

pip install "mcp-canon[indexing]"

Step 2: Create library structure

my-library/
├── engineering/
│   └── python-fastapi-guide/
│       ├── INDEX.md      # Required: metadata
│       └── GUIDE.md      # Content
├── marketing/
│   └── launch-playbook/
│       ├── INDEX.md
│       └── GUIDE.md
└── video-editing/
    └── shorts-workflow/
        └── INDEX.md      # Can reference external URL

Step 3: Create guides

Step 4: Index your library

# Index to custom location
canon index --library ./my-library --output /path/to/my-db

# Validate frontmatter before indexing (optional)
canon validate --library ./my-library

Running as HTTP server

For remote access or multi-client scenarios, run Canon as an HTTP server. This is useful when multiple agents or teams share one cross-domain knowledge base.

Step 1: Install with HTTP support

pip install "mcp-canon[http]"

Step 2: Start the server

# Default port 8080
canon serve

# Custom port and host
canon serve --port 3000 --host 0.0.0.0

# With custom database
CANON_DB_PATH=/path/to/db canon serve --port 8080

Step 3: Configure MCP client

{
  "mcpServers": {
    "canon": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

Environment Variables

Variable

Description

Default

CANON_DB_PATH

Path to custom database

Bundled DB

CANON_EMBEDDING_MODEL

Fastembed model name (supported models)

nomic-ai/nomic-embed-text-v1.5-Q

CANON_EMBEDDING_DIM

Embedding vector dimensions (must match model)

768

CANON_FASTEMBED_THREADS

ONNX runtime threads for FastEmbed (lower = less RAM, slower)

auto

CANON_FASTEMBED_BATCH_SIZE

Embedding batch size during indexing (lower = less RAM, slower)

256

CANON_FASTEMBED_PARALLEL

FastEmbed data-parallel workers (>1 increases RAM usage)

disabled

CANON_LOG_LEVEL

Log level (DEBUG, INFO, WARNING, ERROR)

INFO

CANON_LOG_JSON

Output logs in JSON format

false

Note: Changing CANON_EMBEDDING_MODEL or CANON_EMBEDDING_DIM requires a full reindex: canon index --library ./library

Change embedding model and dimensions

Internal constants EMBEDDING_MODEL_NAME and EMBEDDING_DIM are configured via:

  • CANON_EMBEDDING_MODEL

  • CANON_EMBEDDING_DIM

Example (using BAAI/bge-small-en-v1.5, 384 dims):

CANON_EMBEDDING_MODEL=BAAI/bge-small-en-v1.5 \
CANON_EMBEDDING_DIM=384 \
canon index --library ./library --output ./my-db

Where to find available models:

Important:

  • CANON_EMBEDDING_DIM must match the selected model output size.

  • After changing model or dimension, rebuild the index before running search/server commands.


MCP Tools

Tool

Description

search_best_practices

Semantic search for best practices in any domain (optionally scoped by guide_id)

search_suitable_guides

Find guides that match a task description across domains

read_full_guide

Get complete guide content for full context


CLI Commands

# Indexing
canon index --library ./library           # Index guides from any domain (creates new DB)
canon index --library ./lib --append      # Add to existing database
canon validate --library ./library        # Validate frontmatter

# Server
canon serve --port 8080                   # Start HTTP server (requires [http])

# Info
canon list                                # List indexed guides
canon info                                # Show database info

License

MIT

Available Tools

3 tools
read_full_guideA

Get the complete content of a guide.

Use this tool when:

  • You need the full context of a guide

  • The guide is short and you want everything

  • You're implementing a feature from scratch

Warning: Large guides (>20k chars) will be truncated. Use consult_guide_for_task for specific sections.

Args: guide_id: Guide ID (e.g., 'python/fastapi-production')

Returns: Full guide content or table of contents if truncated

ParametersJSON Schema
NameRequiredDescriptionDefault
guide_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It clearly discloses truncation behavior for large guides (>20k chars) and what is returned (full content or table of contents if truncated). No contradictions.

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?

Description is compact (8 lines) yet covers use cases, warnings, arguments, and returns. Structured with clear headings (Use this tool when:, Warning:, Args:, Returns:) making it easy to scan.

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?

Given one simple parameter and an output schema (implied), the description covers key behavioral aspects (truncation, return format). It is complete enough for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for descriptions, but the description adds meaning for the sole parameter 'guide_id' with an example ('python/fastapi-production'), which provides clear guidance beyond the schema's type definition.

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 'Get the complete content of a guide.' Verb+resource is specific. While it doesn't explicitly differentiate from siblings like search_best_practices, the purpose is unambiguous and distinct from search functionality.

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

Usage Guidelines5/5

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

Explicitly lists when to use (full context, short guide, implementing from scratch) and when not to (large guides, use consult_guide_for_task for sections). Provides clear context and alternatives.

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

search_best_practicesA

Semantic search for best practices across all guides or within a specific guide.

Use this tool when:

  • The user asks a conceptual question: "How to hash passwords?"

  • You need to find code patterns or recommendations

  • You want to deep dive into a specific guide (provide guide_id)

IMPORTANT: Always formulate queries in English for optimal search quality, even if the user's question is in another language.

Args: query: Natural language search query in English. Be specific and descriptive. guide_id: Optional guide ID to search within (e.g., 'python/django-security'). If provided, searches only within this guide (returns top 3 sections). If not provided, searches across all guides (returns top 5 results). namespace: Filter by technology (e.g., 'python', 'go'). Ignored if guide_id is set.

Returns: Relevant chunks with content and source information

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
guide_idNo
namespaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

No annotations provided, but the description thoroughly explains behavior: semantic search, result count differences based on guide_id, namespace filtering, and return type. No contradictions.

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?

Well-organized with bullet points and sections. Every sentence adds value; no redundant or filler content.

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?

Given the tool's complexity (3 params, search function) and the presence of an output schema, the description covers all necessary context: purpose, when to use, parameter details, behavioral nuances.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates fully by explaining each parameter's type, constraints, and effect on results (e.g., guide_id top 3 vs top 5, namespace ignored if guide_id set).

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 'Semantic search for best practices across all guides or within a specific guide' using a specific verb and resource. It implicitly distinguishes from siblings by focusing on best practices 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?

Explicitly lists three 'Use this tool when' scenarios and a language guideline. However, it does not explicitly state when not to use it or directly compare to alternative siblings.

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

search_suitable_guidesA

Find guides that match a task description.

Use this tool when:

  • You need to find the right guide for a specific task

  • The user describes a problem or goal

  • You want guide-level results, not chunk-level

IMPORTANT: Always formulate queries in English for optimal search quality, even if the user's question is in another language.

Args: query: Description of the task or goal in English namespace: Filter by technology

Returns: Top 3 matching guides with descriptions

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
namespaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return format ('Top 3 matching guides with descriptions') and implies a read-only operation. Additional behavioral details like rate limits or data freshness are missing but not critical for a search tool.

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?

The description is well-structured with bullet points and clear sections, front-loading the purpose. It is concise, though the 'IMPORTANT' note adds essential context without being verbose.

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 existing (as indicated), the description need not detail return values. It sufficiently covers the two parameters, usage context, and distinguishes from siblings. The tool's behavior is adequately described for a search operation.

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?

Schema description coverage is 0%, meaning the schema properties lack descriptions. The description's 'Args:' section compensates by explaining 'query' and 'namespace', adding necessary meaning beyond the bare 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 'Find guides that match a task description', using a specific verb ('find') and resource ('guides'). It distinguishes from siblings by explicitly mentioning 'guide-level results, not chunk-level', differentiating from potential chunk-level searches.

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 provides explicit 'Use this tool when' scenarios and an important instruction to formulate queries in English. However, it does not directly compare with sibling tools or explicitly state when not to use this tool, leaving some ambiguity.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.2.0
    • First observedread_full_guide
    • First observedsearch_best_practices
    • First observedsearch_suitable_guides

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: read_full_guide retrieves full guide content, search_best_practices performs semantic search within guides, and search_suitable_guides finds guides matching a task. No overlap in functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern: read_full_guide, search_best_practices, search_suitable_guides. The naming is predictable and clear.

Tool Count4/5

With only 3 tools, the server feels slightly minimal but still covers core operations for a guide and best-practices domain. It's reasonable for a focused server.

Completeness2/5

Significant gaps exist: there is no tool to list all available guides, and the read_full_guide tool truncates large guides while referencing a missing 'consult_guide_for_task' tool. This creates dead ends for agents.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tripcher/canon'

If you have feedback or need assistance with the MCP directory API, please join our Discord server