kogral/docs/api/mcp-tools.md

903 lines
19 KiB
Markdown
Raw Normal View History

2026-01-23 16:11:07 +00:00
# MCP Tools API Reference
Complete reference for the Model Context Protocol (MCP) server tools and resources.
## Overview
The kogral-mcp server implements the MCP protocol (JSON-RPC 2.0) for Claude Code integration. It provides:
- **10 Tools**: Operations for querying and modifying knowledge base (7 core + 3 block tools)
- **6 Resources**: Access to knowledge graph content via URIs
- **2 Prompts**: Guided workflows for common tasks
## Server Configuration
### Start MCP Server
```bash
# Stdio transport (local use)
kogral serve
# Or run directly
kogral-mcp serve
```
### Claude Code Configuration
Add to `~/.config/claude/config.json`:
```json
{
"mcpServers": {
"kogral-mcp": {
"command": "/path/to/kogral-mcp",
"args": ["serve"],
"env": {
"KOGRAL_DIR": "/path/to/project/.kogral"
}
}
}
}
```
## Tools
### kogral/search
Search the knowledge base using text and/or semantic similarity.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query"
},
"type": {
"type": "string",
"enum": ["note", "decision", "guideline", "pattern", "journal", "execution", "all"],
"description": "Filter by node type",
"default": "all"
},
"project": {
"type": "string",
"description": "Limit search to specific project graph"
},
"semantic": {
"type": "boolean",
"description": "Enable semantic similarity search",
"default": true
},
"threshold": {
"type": "number",
"description": "Minimum similarity threshold (0-1)",
"default": 0.4
},
"limit": {
"type": "integer",
"description": "Maximum number of results",
"default": 10
}
},
"required": ["query"]
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 1,
"method": "kogral/search",
"params": {
"query": "error handling patterns in Rust",
"type": "pattern",
"semantic": true,
"threshold": 0.6,
"limit": 5
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"type": "text",
"text": "Found 3 result(s):\n\n1. Error Handling with thiserror (pattern, score: 0.85)\n Tags: rust, error-handling\n Created: 2026-01-15\n \n2. Result Type Best Practices (guideline, score: 0.72)\n Tags: rust, error-handling, best-practices\n Created: 2026-01-10\n\n3. Custom Error Types (note, score: 0.65)\n Tags: rust, error-handling\n Created: 2026-01-08"
}
}
```
### kogral/add_note
Add a new note to the knowledge base.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Note title"
},
"content": {
"type": "string",
"description": "Note content (markdown)"
},
"tags": {
"type": "array",
"items": { "type": "string" },
"description": "Tags for categorization",
"default": []
},
"relates_to": {
"type": "array",
"items": { "type": "string" },
"description": "Related node IDs",
"default": []
},
"project": {
"type": "string",
"description": "Project graph name",
"default": "default"
}
},
"required": ["title", "content"]
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 2,
"method": "kogral/add_note",
"params": {
"title": "Async Trait Patterns",
"content": "Common patterns for using async traits in Rust:\n\n1. Use `async-trait` crate\n2. Box return types for flexibility\n3. Consider Send + Sync bounds",
"tags": ["rust", "async", "patterns"],
"relates_to": ["pattern-error-handling"]
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"type": "text",
"text": "Note added successfully: note-async-trait-patterns (ID: note-abc123)"
}
}
```
### kogral/add_decision
Create an Architectural Decision Record (ADR).
**Input Schema**:
```json
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Decision title"
},
"context": {
"type": "string",
"description": "Decision context and background"
},
"decision": {
"type": "string",
"description": "The decision made"
},
"consequences": {
"type": "array",
"items": { "type": "string" },
"description": "List of consequences",
"default": []
},
"status": {
"type": "string",
"enum": ["proposed", "accepted", "rejected", "deprecated", "superseded"],
"default": "proposed"
},
"tags": {
"type": "array",
"items": { "type": "string" },
"default": []
}
},
"required": ["title", "context", "decision"]
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 3,
"method": "kogral/add_decision",
"params": {
"title": "Use SurrealDB for Knowledge Graph Storage",
"context": "Need a scalable storage solution that supports graph queries and can handle growing knowledge base",
"decision": "Adopt SurrealDB as the primary storage backend for production deployments",
"consequences": [
"Better query performance for graph traversal",
"Native support for relationships",
"Additional infrastructure dependency",
"Team needs to learn SurrealDB query language"
],
"status": "accepted",
"tags": ["architecture", "storage", "surrealdb"]
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"type": "text",
"text": "Decision added: decision-use-surrealdb (ID: decision-xyz789)\nStatus: accepted"
}
}
```
### kogral/link
Create a relationship between two nodes.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Source node ID"
},
"to": {
"type": "string",
"description": "Target node ID"
},
"relation": {
"type": "string",
"enum": ["relates_to", "depends_on", "implements", "extends", "supersedes", "explains"],
"description": "Relationship type"
},
"strength": {
"type": "number",
"description": "Relationship strength (0-1)",
"minimum": 0,
"maximum": 1,
"default": 1.0
}
},
"required": ["from", "to", "relation"]
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 4,
"method": "kogral/link",
"params": {
"from": "note-async-trait-patterns",
"to": "pattern-error-handling",
"relation": "relates_to",
"strength": 0.8
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"type": "text",
"text": "Link created: note-async-trait-patterns --[relates_to]--> pattern-error-handling (strength: 0.8)"
}
}
```
**Relationship Types**:
- `relates_to`: General conceptual relationship
- `depends_on`: Dependency (from depends on to)
- `implements`: Implementation of concept/pattern
- `extends`: Inherits or extends another node
- `supersedes`: Replaces an older version
- `explains`: Provides documentation/clarification
### kogral/get_guidelines
Retrieve guidelines for current project with inheritance resolution.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"language": {
"type": "string",
"description": "Programming language (e.g., rust, nushell)"
},
"category": {
"type": "string",
"description": "Guideline category (e.g., error-handling, testing)"
},
"include_base": {
"type": "boolean",
"description": "Include shared/base guidelines",
"default": true
}
}
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 5,
"method": "kogral/get_guidelines",
"params": {
"language": "rust",
"category": "error-handling",
"include_base": true
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 5,
"result": {
"type": "text",
"text": "Guidelines for rust/error-handling:\n\n## Project Guidelines (priority: 150)\n\n1. Custom Error Types (guideline-custom-errors)\n - Use thiserror for error definitions\n - Implement From traits for conversions\n - Source: .kogral/guidelines/rust-errors.md\n\n## Shared Guidelines (priority: 50)\n\n1. Result Type Best Practices (guideline-result-best-practices)\n - Always use Result<T> for fallible operations\n - Never use unwrap() in production\n - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md\n\n2. Error Propagation (guideline-error-propagation)\n - Use ? operator for error propagation\n - Add context with .context()\n - Source: ~/Tools/.kogral-shared/guidelines/rust-errors.md"
}
}
```
### kogral/list_graphs
List available knowledge graphs.
**Input Schema**:
```json
{
"type": "object",
"properties": {}
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 6,
"method": "kogral/list_graphs"
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 6,
"result": {
"type": "text",
"text": "Available graphs:\n\n- default (Current project)\n Path: /path/to/project/.kogral\n Nodes: 42\n Last modified: 2026-01-17T10:30:00Z\n\n- shared (Shared guidelines)\n Path: ~/Tools/.kogral-shared\n Nodes: 156\n Last modified: 2026-01-15T14:20:00Z"
}
}
```
### kogral/export
Export knowledge base to various formats.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"format": {
"type": "string",
"enum": ["logseq", "json", "markdown"],
"description": "Export format"
},
"output_path": {
"type": "string",
"description": "Output file or directory path"
},
"include_types": {
"type": "array",
"items": {
"type": "string",
"enum": ["note", "decision", "guideline", "pattern", "journal", "execution"]
},
"description": "Node types to include",
"default": ["note", "decision", "guideline", "pattern"]
},
"skip_journals": {
"type": "boolean",
"default": true
}
},
"required": ["format", "output_path"]
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 7,
"method": "kogral/export",
"params": {
"format": "logseq",
"output_path": "/Users/akasha/logseq-graph",
"include_types": ["note", "decision", "guideline"],
"skip_journals": true
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"type": "text",
"text": "Export completed:\n\nFormat: Logseq\nOutput: /Users/akasha/logseq-graph\nExported: 42 nodes\n - 23 notes\n - 12 decisions\n - 7 guidelines\n\nLogseq graph ready to open."
}
}
```
## Block Tools
Tools for querying Logseq content blocks. Requires `blocks.enable_mcp_tools = true` in configuration.
### kogral/find_blocks
Find blocks by tag, task status, or custom property across the knowledge base.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"tag": {
"type": "string",
"description": "Find blocks with this tag (e.g., 'card', 'important')"
},
"status": {
"type": "string",
"enum": ["TODO", "DOING", "DONE", "LATER", "NOW", "WAITING", "CANCELLED"],
"description": "Find blocks with this task status"
},
"property_key": {
"type": "string",
"description": "Custom property key to search for"
},
"property_value": {
"type": "string",
"description": "Custom property value to match"
},
"limit": {
"type": "integer",
"description": "Maximum number of results",
"default": 20
}
}
}
```
**Note**: Provide one of: `tag`, `status`, or both `property_key` and `property_value`.
**Example Request** (find blocks by tag):
```json
{
"jsonrpc": "2.0",
"id": 8,
"method": "kogral/find_blocks",
"params": {
"tag": "high-priority",
"limit": 10
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 8,
"result": {
"type": "text",
"text": "Found 3 blocks with tag '#high-priority':\n\n**Project Tasks** (project-tasks-123)\n - TODO Implement authentication #high-priority\n - TODO Fix security vulnerability #high-priority\n\n**Sprint Planning** (sprint-planning-456)\n - DOING Refactor database layer #high-priority"
}
}
```
**Example Request** (find blocks by property):
```json
{
"jsonrpc": "2.0",
"id": 9,
"method": "kogral/find_blocks",
"params": {
"property_key": "priority",
"property_value": "high",
"limit": 15
}
}
```
### kogral/find_todos
Find all TODO blocks across the knowledge base.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum number of results",
"default": 20
}
}
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 10,
"method": "kogral/find_todos",
"params": {
"limit": 25
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 10,
"result": {
"type": "text",
"text": "Found 8 TODO blocks:\n\n**Project Tasks** (project-tasks-123)\n - TODO Implement authentication\n - TODO Write integration tests\n - TODO Update documentation\n\n**Bug Fixes** (bug-fixes-456)\n - TODO Fix race condition in cache\n - TODO Address memory leak\n\n**Research** (research-789)\n - TODO Evaluate GraphQL alternatives\n - TODO Benchmark new approach\n - TODO Document findings"
}
}
```
### kogral/find_cards
Find all flashcard blocks (blocks tagged with #card) for spaced repetition learning.
**Input Schema**:
```json
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Maximum number of flashcards",
"default": 10
}
}
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 11,
"method": "kogral/find_cards",
"params": {
"limit": 5
}
}
```
**Example Response**:
```json
{
"jsonrpc": "2.0",
"id": 11,
"result": {
"type": "text",
"text": "Found 3 flashcards:\n\n**Rust Learning** (rust-learning-123)\n - What is Rust's ownership model? #card #rust\n - Ownership prevents data races at compile time\n - Each value has a single owner\n\n**System Design** (system-design-456)\n - What is the CAP theorem? #card #distributed-systems\n - Consistency, Availability, Partition tolerance\n - Can only guarantee 2 of 3\n\n**Algorithms** (algorithms-789)\n - What is the time complexity of quicksort? #card #algorithms\n - Average: O(n log n)\n - Worst case: O(n²)"
}
}
```
**Use Cases**:
- **kogral/find_blocks**: General block search by metadata
- **kogral/find_todos**: Task management and tracking
- **kogral/find_cards**: Spaced repetition learning system
**See Also**:
- [Logseq Blocks Support](../kogral/core-concepts.md#logseq-content-blocks)
- [ADR-004: Logseq Blocks Support](../architecture/adrs/004-logseq-blocks-support.md)
## Resources
Resources provide read-only access to knowledge graph content via URIs.
### kogral://project/notes
Access project notes.
**URI**: `kogral://project/notes` or `kogral://project/notes/{note-id}`
**Example**: Read all project notes
```text
kogral://project/notes
```
**Example**: Read specific note
```text
kogral://project/notes/async-trait-patterns
```
### kogral://project/decisions
Access project decisions (ADRs).
**URI**: `kogral://project/decisions` or `kogral://project/decisions/{decision-id}`
### kogral://project/guidelines
Access project-specific guidelines.
**URI**: `kogral://project/guidelines` or `kogral://project/guidelines/{guideline-id}`
### kogral://project/patterns
Access project patterns.
**URI**: `kogral://project/patterns` or `kogral://project/patterns/{pattern-id}`
### kogral://shared/guidelines
Access shared guidelines (inherited).
**URI**: `kogral://shared/guidelines` or `kogral://shared/guidelines/{guideline-id}`
### kogral://shared/patterns
Access shared patterns (inherited).
**URI**: `kogral://shared/patterns` or `kogral://shared/patterns/{pattern-id}`
## Prompts
Prompts provide guided workflows for common tasks.
### kogral/summarize_project
Generate a comprehensive project knowledge summary.
**Arguments**:
```json
{
"project": {
"type": "string",
"description": "Project graph name",
"default": "default"
}
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 8,
"method": "kogral/summarize_project",
"params": {
"project": "default"
}
}
```
**Returns**: Prompt messages with project summary including:
- Total node counts by type
- Recent additions
- Top tags
- Key decisions
- Active patterns
### kogral/find_related
Find nodes related to a specific topic or node.
**Arguments**:
```json
{
"node_id": {
"type": "string",
"description": "Node ID to find relations for"
},
"depth": {
"type": "integer",
"description": "Maximum traversal depth",
"default": 2
}
}
```
**Example Request**:
```json
{
"jsonrpc": "2.0",
"id": 9,
"method": "kogral/find_related",
"params": {
"node_id": "pattern-error-handling",
"depth": 2
}
}
```
**Returns**: Prompt messages with:
- Direct relationships
- Indirect relationships (depth 2+)
- Common tags
- Related guidelines
## Error Handling
### Error Codes
Standard JSON-RPC 2.0 error codes:
| Code | Meaning | Description |
| ------ | --------- | ------------- |
| -32700 | Parse error | Invalid JSON |
| -32600 | Invalid Request | Missing required fields |
| -32601 | Method not found | Unknown tool/resource |
| -32602 | Invalid params | Parameter validation failed |
| -32603 | Internal error | Server-side error |
### Example Error Response
```json
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Invalid params",
"data": {
"details": "Field 'query' is required but missing",
"field": "query"
}
}
}
```
## Best Practices
### 1. Use Semantic Search for Discovery
```json
{
"method": "kogral/search",
"params": {
"query": "how to handle database connection errors",
"semantic": true,
"threshold": 0.5
}
}
```
### 2. Link Related Concepts
```json
{
"method": "kogral/link",
"params": {
"from": "note-new-discovery",
"to": "pattern-related-pattern",
"relation": "implements"
}
}
```
### 3. Query Guidelines Before Implementation
```json
{
"method": "kogral/get_guidelines",
"params": {
"language": "rust",
"category": "testing"
}
}
```
### 4. Document Decisions with ADRs
```json
{
"method": "kogral/add_decision",
"params": {
"title": "Use X for Y",
"context": "Background...",
"decision": "We will...",
"consequences": ["Pro 1", "Con 1"]
}
}
```
## See Also
- [MCP Specification](https://modelcontextprotocol.io/docs)
- [Quick Start Guide](../user-guide/quickstart.md)
- [Configuration Reference](../user-guide/configuration.md)
- [kogral-mcp Source Code](../../crates/kogral-mcp/src/)