mcp-canon
Click on "Install 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., "@mcp-canonfind the guide for Python async patterns"
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.
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-canonCursor Local Connection With Custom Database
claude mcp add --scope user -e CANON_DB_PATH=/path/to/my-db canon -- uvx mcp-canonClaude Code Remote Server Connection
claude mcp add --scope user --transport http canon http://localhost:8080/mcpRemove
--scope userto 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-canonGemini CLI Local Connection With Custom Database
gemini mcp add --scope user -e CANON_DB_PATH=/path/to/my-db canon uvx mcp-canonGemini CLI Remote Server Connection
gemini mcp add --scope user --transport http canon http://localhost:8080/mcpRemove
--scope userto 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 URLStep 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-libraryRunning 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 8080Step 3: Configure MCP client
{
"mcpServers": {
"canon": {
"url": "http://localhost:8080/mcp"
}
}
}Environment Variables
Variable | Description | Default |
| Path to custom database | Bundled DB |
| Fastembed model name (supported models) |
|
| Embedding vector dimensions (must match model) |
|
| ONNX runtime threads for FastEmbed (lower = less RAM, slower) | auto |
| Embedding batch size during indexing (lower = less RAM, slower) |
|
| FastEmbed data-parallel workers ( | disabled |
| Log level (DEBUG, INFO, WARNING, ERROR) | INFO |
| Output logs in JSON format | false |
Note: Changing
CANON_EMBEDDING_MODELorCANON_EMBEDDING_DIMrequires 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_MODELCANON_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-dbWhere to find available models:
FastEmbed supported models: https://qdrant.github.io/fastembed/examples/Supported_Models/
FastEmbed model card and usage notes: https://qdrant.github.io/fastembed/
Important:
CANON_EMBEDDING_DIMmust match the selected model output size.After changing model or dimension, rebuild the index before running search/server commands.
MCP Tools
Tool | Description |
| Semantic search for best practices in any domain (optionally scoped by guide_id) |
| Find guides that match a task description across domains |
| 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 infoLicense
MIT
Available Tools
3 toolsread_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
| Name | Required | Description | Default |
|---|---|---|---|
| guide_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| guide_id | No | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.2.0- First observed
read_full_guide - First observed
search_best_practices - First observed
search_suitable_guides
TDQS
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.
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.
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.
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
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
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
Related MCP Servers
- AlicenseAqualityAmaintenanceA universal MCP server that enables any LLM or AI agent to access expert skills from your local filesystem.359838MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that gives AI coding agents a git-backed markdown wiki to read and update, enabling search, read, write, verify, ingest, promote, and lint operations on versioned knowledge documents with schema validation, staleness tracking, and contradiction detection.3MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that enables AI agents to search, fetch, and analyze a self-maintaining markdown knowledge base with provenance, drift detection, and canonical definitions.MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for a shared Postgres-backed knowledge base with hybrid retrieval and agentic RAG, enabling coding agents to upload, search, and ask questions over documents with cited answers.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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