MCP Tools Reference¶
Complete reference for all MCP server tools available to AI assistants
Overview¶
The Obsidian MCP Server provides 27 tools organized into 7 categories:
graph TD
MCP[MCP Server Tools]
MCP --> CRUD[CRUD Operations]
MCP --> SEARCH[Search & Navigation]
MCP --> ANALYSIS[Analysis & Insights]
MCP --> BULK[Bulk Operations]
MCP --> WORKSPACE[Workspace Management]
MCP --> SEMANTIC[Semantic Search]
MCP --> UTILITY[Utility Tools]
CRUD --> C1[create_entity]
CRUD --> C2[update_entity]
CRUD --> C3[handle_entity]
SEARCH --> S1[search_entities]
SEARCH --> S2[get_entity]
SEARCH --> S3[get_entities]
ANALYSIS --> A1[get_project_overview]
ANALYSIS --> A2[analyze_project_state]
ANALYSIS --> A3[get_feature_coverage]
ANALYSIS --> A4[get_schema]
BULK --> B1[batch_update]
BULK --> B2[handle_entities]
BULK --> B3[cleanup_completed]
WORKSPACE --> W1[manage_workspaces]
WORKSPACE --> W2[list_workspaces]
WORKSPACE --> W3[list_files]
SEMANTIC --> SE1[search_docs]
SEMANTIC --> SE2[msrl_status]
UTILITY --> U1[read_docs]
UTILITY --> U2[update_doc]
UTILITY --> U3[rebuild_index]
Tool Categories¶
| Category | Count | Tools |
|---|---|---|
| CRUD Operations | 3 | create_entity, update_entity, handle_entity |
| Search & Navigation | 3 | search_entities, get_entity, get_entities |
| Analysis & Insights | 4 | get_project_overview, analyze_project_state, get_feature_coverage, get_schema |
| Bulk Operations | 3 | batch_update, handle_entities, cleanup_completed |
| Workspace Management | 3 | manage_workspaces, list_workspaces, list_files |
| Semantic Search | 2 | search_docs, msrl_status |
| Utility | 3 | read_docs, update_doc, rebuild_index |
| Document Management | 1 | manage_documents |
| TOTAL | 27 |
CRUD Operations¶
create_entity¶
Create a new entity (Milestone, Story, Task, Decision, Document, or Feature).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
type |
string | ✅ | Entity type: milestone, story, task, decision, document, feature |
data |
object | ✅ | Entity-specific fields (see Entity Schemas) |
options.add_to_canvas |
boolean | ❌ | Add to canvas (default: true) |
options.canvas_source |
string | ❌ | Canvas file path |
Example:
{
"type": "milestone",
"data": {
"title": "Q1 Release",
"workstream": "engineering",
"objective": "Deliver Q1 features",
"priority": "P0"
}
}
Returns:
{
"id": "M-001",
"entity": {
"id": "M-001",
"type": "milestone",
"title": "Q1 Release",
"status": "Not Started",
"workstream": "engineering",
"priority": "P0",
"objective": "Deliver Q1 features"
},
"dependencies_created": 0,
"canvas_node_added": true
}
Notes: - Auto-generates sequential ID (M-001, S-001, T-001, etc.) - Validates required fields per entity type - Prevents orphaned entities (stories must have parent milestone, tasks must have parent story) - Normalizes workstream names (e.g., "infrastructure" → "infra")
update_entity¶
Update existing entity fields, relationships, or status.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | ✅ | Entity ID (e.g., "M-001") |
data |
object | ❌ | Fields to update |
status |
string | ❌ | New status (validates transitions) |
add_dependencies |
array | ❌ | Entity IDs to add to depends_on |
remove_dependencies |
array | ❌ | Entity IDs to remove from depends_on |
archived |
boolean | ❌ | Archive (true) or restore (false) |
return_full |
boolean | ❌ | Return full entity (default: false for minimal response) |
return_fields |
array | ❌ | Specific fields to return |
Example:
{
"id": "S-015",
"status": "In Progress",
"data": {
"priority": "P0"
},
"add_dependencies": ["S-012", "S-013"]
}
Returns:
{
"id": "S-015",
"updated_fields": ["status", "priority", "depends_on"],
"entity": {
"id": "S-015",
"status": "In Progress",
"priority": "P0"
}
}
Notes:
- Validates status transitions (e.g., can't go from "Not Started" to "Completed")
- Detects circular dependencies
- Supports cascade status updates (update children when parent completes)
- Archive/restore moves files to/from archive/ folders
handle_entity¶
Unified entity handler - routes to create, get, or update based on action.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | ✅ | Action: create, get, update |
| ...rest | varies | varies | Parameters depend on action |
Example:
{
"action": "create",
"type": "story",
"title": "User Authentication",
"workstream": "engineering",
"parent": "M-001"
}
Notes:
- Flat schema (no nested data object)
- Simplifies AI tool calls
- Routes to appropriate CRUD function
Search & Navigation¶
search_entities¶
Full-text and semantic search across entities with filters.
Modes:
1. Semantic Search - query + semantic=true (MSRL hybrid search)
2. Full-Text Search - query only (BM25 search)
3. Navigation - from_id + direction (traverse relationships)
4. List - filters only (list entities)
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | ❌ | Search query text |
semantic |
boolean | ❌ | Use semantic search (default: false) |
from_id |
string | ❌ | Starting entity for navigation |
direction |
string | ❌ | Navigation direction: parent, children, dependencies, dependents, documents, decisions, features |
filters.type |
array | ❌ | Entity types to include |
filters.status |
array | ❌ | Statuses to include |
filters.workstream |
array | ❌ | Workstreams to include |
filters.archived |
boolean | ❌ | Include archived entities |
fields |
array | ❌ | Fields to return (default: id, type, title, status, workstream) |
max_items |
integer | ❌ | Max results (default: 20, max: 200) |
since |
string | ❌ | Only return entities modified after this timestamp |
Example (Semantic Search):
{
"query": "authentication implementation",
"semantic": true,
"filters": {
"type": ["story", "task"]
},
"max_items": 10
}
Example (Navigation):
Returns:
{
"results": [
{
"id": "S-015",
"type": "story",
"title": "User Authentication",
"status": "In Progress",
"workstream": "engineering",
"score": 0.85
}
],
"count": 1,
"total_count": 1,
"has_more": false
}
get_entity¶
Get a single entity by ID with optional field selection.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | ✅ | Entity ID |
fields |
array | ❌ | Fields to return (default: all) |
Example:
Returns:
{
"id": "M-001",
"title": "Q1 Release",
"status": "In Progress",
"children": ["S-001", "S-002", "S-003"],
"children_count": 3
}
get_entities¶
Get multiple entities by IDs (batch get).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
ids |
array | ✅ | Array of entity IDs |
fields |
array | ❌ | Fields to return |
Example:
Analysis & Insights¶
get_project_overview¶
Get high-level project summary with statistics.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
include_workstreams |
boolean | ❌ | Include workstream breakdown (default: true) |
include_recent |
boolean | ❌ | Include recently updated entities (default: true) |
Returns:
{
"summary": {
"total_entities": 156,
"by_type": {
"milestone": 12,
"story": 45,
"task": 89,
"decision": 8,
"document": 2,
"feature": 0
},
"by_status": {
"Not Started": 45,
"In Progress": 23,
"Completed": 78,
"Blocked": 10
}
},
"workstreams": [
{
"name": "engineering",
"entity_count": 89,
"in_progress": 15,
"blocked": 3
}
],
"recent_updates": [
{
"id": "S-015",
"title": "User Authentication",
"status": "In Progress",
"updated_at": "2026-01-24T14:30:00Z"
}
]
}
analyze_project_state¶
Detailed project analysis with dependency graph, blockers, and risks.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
include_dependency_graph |
boolean | ❌ | Include full dependency graph (default: false) |
include_blockers |
boolean | ❌ | Include blocked entities analysis (default: true) |
Returns:
{
"health_score": 0.75,
"blockers": [
{
"id": "S-015",
"title": "User Authentication",
"blocked_by": ["S-012", "S-013"],
"blocking": ["T-042", "T-043"]
}
],
"risks": [
{
"type": "circular_dependency",
"entities": ["S-015", "S-016", "S-015"],
"severity": "high"
}
],
"dependency_graph": {
"nodes": ["M-001", "S-015", "T-042"],
"edges": [
{"from": "T-042", "to": "S-015"},
{"from": "S-015", "to": "M-001"}
]
}
}
get_feature_coverage¶
Analyze feature implementation, documentation, and test coverage.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
tier |
string | ❌ | Filter by tier: OSS, Premium |
phase |
string | ❌ | Filter by phase: MVP, 0-5 |
show_gaps_only |
boolean | ❌ | Only show features with gaps (default: false) |
Returns:
{
"summary": {
"total_features": 24,
"implemented": 18,
"documented": 15,
"tested": 12,
"complete": 10
},
"gaps": {
"missing_implementation": ["F-005", "F-012"],
"missing_documentation": ["F-003", "F-007", "F-015"],
"missing_tests": ["F-001", "F-008", "F-011", "F-019"]
},
"features": [
{
"id": "F-001",
"title": "User Authentication",
"tier": "OSS",
"phase": "MVP",
"status": "Complete",
"implemented_by": ["S-015", "S-016"],
"documented_by": ["DOC-003"],
"test_refs": [],
"coverage": {
"implementation": true,
"documentation": true,
"tests": false
}
}
]
}
get_schema¶
Get entity schema definitions with field types and relationships.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
entity_type |
string | ❌ | Specific entity type (default: all) |
relationships_only |
boolean | ❌ | Only return relationship fields (default: false) |
Returns:
{
"schemas": [
{
"type": "milestone",
"id_pattern": "M-XXX",
"fields": {
"id": {
"type": "MilestoneId",
"required": true,
"description": "Unique identifier (M-XXX format)"
},
"title": {
"type": "string",
"required": true,
"description": "Milestone title"
},
"status": {
"type": "enum",
"required": true,
"values": ["Planned", "In Progress", "Complete", "Blocked", "Deferred"]
}
}
}
]
}
Bulk Operations¶
batch_update¶
Perform multiple create/update/archive operations in a single call.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
ops |
array | ✅ | Array of operations |
options.atomic |
boolean | ❌ | Rollback all if any fails (default: false) |
options.dry_run |
boolean | ❌ | Preview changes without applying (default: false) |
options.include_entities |
boolean | ❌ | Return full entities in results (default: false) |
options.fields |
array | ❌ | Fields to return |
Operation Types:
- create - Create new entity
- update - Update existing entity
- archive - Archive entity
Example:
{
"ops": [
{
"op": "create",
"client_id": "temp-1",
"type": "milestone",
"data": {
"title": "Q2 Release",
"workstream": "engineering"
}
},
{
"op": "create",
"type": "story",
"data": {
"title": "API Redesign",
"workstream": "engineering",
"parent": "{{temp-1}}"
}
},
{
"op": "update",
"id": "S-015",
"data": {
"status": "In Progress"
}
}
],
"options": {
"dry_run": false,
"atomic": true
}
}
Returns:
{
"results": [
{
"op": "create",
"client_id": "temp-1",
"success": true,
"id": "M-005",
"message": "Created milestone M-005"
},
{
"op": "create",
"success": true,
"id": "S-042",
"message": "Created story S-042"
},
{
"op": "update",
"success": true,
"id": "S-015",
"message": "Updated story S-015"
}
],
"summary": {
"total": 3,
"succeeded": 3,
"failed": 0
}
}
Notes:
- client_id enables cross-referencing within batch (use {{client_id}} syntax)
- Idempotent - same client_id won't create duplicates
- Atomic mode rolls back all changes if any operation fails
handle_entities¶
Unified batch handler - routes to batch or get operations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | ✅ | Action: batch, get |
| ...rest | varies | varies | Parameters depend on action |
cleanup_completed¶
Archive all completed entities (status: Completed).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
dry_run |
boolean | ❌ | Preview without archiving (default: false) |
include_orphaned |
boolean | ❌ | Archive even if it orphans other entities (default: false) |
Returns:
{
"archived_count": 15,
"archived_ids": ["M-001", "S-005", "S-012", "T-023"],
"would_orphan": ["DEC-003", "DOC-007"],
"requires_confirmation": true
}
Workspace Management¶
manage_workspaces¶
Create, update, or delete workspace configurations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | ✅ | Action: create, update, delete, get |
workspace |
string | ✅ | Workspace name |
config |
object | ❌ | Workspace configuration |
Example:
{
"action": "create",
"workspace": "architecture-docs",
"config": {
"path": "docs/architecture",
"description": "Architecture decision records and design docs"
}
}
list_workspaces¶
List all configured workspaces.
Parameters: None
Returns:
{
"workspaces": [
{
"name": "docs",
"path": "/vault/docs",
"description": "Documentation workspace",
"file_count": 23
}
],
"count": 1,
"config_last_changed": "2026-01-24T14:30:00Z"
}
list_files¶
List all markdown files in a workspace.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace |
string | ✅ | Workspace name |
max_items |
integer | ❌ | Max results (default: 20, max: 200) |
Returns:
{
"workspace": "docs",
"workspace_description": "Documentation workspace",
"files": [
{
"name": "architecture/ADR-001.md",
"path": "/vault/docs/architecture/ADR-001.md",
"size": 2048,
"last_changed": "2026-01-24T14:30:00Z"
}
],
"count": 1
}
Semantic Search¶
search_docs¶
Hybrid vector + keyword search across all vault documents.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | ✅ | Search query text |
top_k |
integer | ❌ | Number of results (default: 8, max: 50) |
max_excerpt_chars |
integer | ❌ | Max excerpt length (default: 4000, max: 20000) |
filters.doc_uri_prefix |
string | ❌ | Filter to documents starting with path |
filters.doc_uris |
array | ❌ | Filter to specific document URIs |
filters.heading_path_contains |
string | ❌ | Filter to sections containing heading text |
include_scores |
boolean | ❌ | Include detailed scores (default: false) |
Example:
{
"query": "authentication implementation",
"top_k": 10,
"filters": {
"doc_uri_prefix": "decisions/"
}
}
Returns:
{
"results": [
{
"doc_uri": "decisions/DEC-001_PostgreSQL_Database.md",
"heading_path": "Security > Authentication",
"excerpt": "We chose JWT tokens for authentication...",
"start_char": 1234,
"end_char": 1456,
"vector_score": 0.85,
"bm25_score": 0.72,
"hybrid_score": 0.81
}
],
"count": 1,
"took_ms": 45
}
Notes: - Combines 75% vector similarity + 25% BM25 keyword matching - Returns exact provenance (file, heading, character position) - Incremental updates (~750ms per file change) - See Semantic Search Guide for details
msrl_status¶
Get the status of the semantic search index.
Parameters: None
Returns:
{
"state": "ready",
"snapshot_id": "snapshot_20260124_143022",
"stats": {
"doc_count": 156,
"node_count": 892,
"leaf_count": 2341,
"shard_count": 3
},
"watcher": {
"active": true,
"last_event": "2026-01-24T14:30:22Z"
}
}
Utility Tools¶
read_docs¶
Read content from a document in a workspace.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace |
string | ✅ | Workspace name |
doc_name |
string | ✅ | Document name (auto-adds .md extension) |
line_range |
array | ❌ | [start, end] line numbers to read |
Example:
Returns:
{
"workspace": "docs",
"workspace_description": "Documentation workspace",
"doc_name": "architecture/ADR-001.md",
"content": "# ADR-001: Use PostgreSQL\n\n...",
"line_count": 50,
"last_changed": "2026-01-24T14:30:00Z"
}
update_doc¶
Create or update a document in a workspace.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace |
string | ✅ | Workspace name |
name |
string | ✅ | Document name |
operation |
string | ✅ | Operation: create, replace, append, prepend, insert, delete |
content |
string | ❌ | Content to write (for create/replace/append/prepend) |
line_number |
integer | ❌ | Line number (for insert/delete) |
line_range |
array | ❌ | [start, end] for delete operation |
Example:
{
"workspace": "docs",
"name": "new-doc.md",
"operation": "create",
"content": "# New Document\n\nContent here."
}
Returns:
{
"success": true,
"operation": "create",
"doc_name": "new-doc.md",
"line_count": 3,
"last_changed": "2026-01-24T14:30:00Z"
}
rebuild_index¶
Rebuild the in-memory entity index from scratch.
Parameters: None
Returns:
Use Cases: - After manual file system changes - After vault corruption - Debugging index issues
Document Management¶
manage_documents¶
Create or update decision/document entities with content.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | ✅ | Action: create, update |
type |
string | ✅ | Type: decision, document |
id |
string | ❌ | Entity ID (for update) |
data |
object | ✅ | Entity fields |
content |
string | ❌ | Document content |
Example:
{
"action": "create",
"type": "decision",
"data": {
"title": "Use PostgreSQL",
"workstream": "engineering",
"affects": ["S-015", "S-016"]
},
"content": "# Decision: Use PostgreSQL\n\n## Context\n..."
}
Best Practices¶
✅ DO¶
Entity Creation:
- Use create_entity for single entities
- Use batch_update for multiple related entities
- Always specify workstream for better organization
- Use client_id in batch operations for cross-referencing
Search:
- Use semantic=true for meaning-based search
- Use search_entities without semantic for exact keyword matching
- Use filters to narrow results
- Use fields parameter to reduce response size
Updates:
- Use return_full=false for minimal responses (saves context window)
- Use dry_run=true for bulk operations first
- Use cascade=true for status updates that should affect children
Relationships:
- Use navigation mode (from_id + direction) to traverse relationships
- Use get_feature_coverage to find implementation gaps
- Use analyze_project_state to find blockers and risks
❌ DON'T¶
Avoid:
- Creating orphaned entities (stories without milestones, tasks without stories)
- Circular dependencies (use analyze_project_state to detect)
- Manual frontmatter edits without running reconciliation
- Large batch operations without dry_run first
Performance:
- Don't request all fields if you only need a few
- Don't use return_full=true unless necessary
- Don't set max_items > 200 (context window limit)
- Don't use semantic search for simple ID lookups
Common Workflows¶
1. Create Project Structure¶
1. create_entity (Milestone)
2. batch_update (create multiple Stories with parent: M-XXX)
3. batch_update (create Tasks for each Story)
4. get_project_overview (verify structure)
2. Track Progress¶
1. search_entities (filters: {status: ["In Progress"]})
2. update_entity (mark task complete)
3. get_project_overview (check updated stats)
3. Find Implementation Gaps¶
1. get_feature_coverage (show_gaps_only: true)
2. search_entities (semantic: true, query: "feature X implementation")
3. batch_update (link features to implementing entities)
4. Dependency Management¶
1. create_entity (with depends_on)
2. analyze_project_state (check for cycles)
3. search_entities (from_id: "S-XXX", direction: "dependencies")
Tool Summary¶
| Tool | Category | Primary Use Case |
|---|---|---|
create_entity |
CRUD | Create single entity |
update_entity |
CRUD | Update entity fields/status |
handle_entity |
CRUD | Unified CRUD handler |
search_entities |
Search | Find entities by query/filters |
get_entity |
Search | Get single entity |
get_entities |
Search | Get multiple entities |
get_project_overview |
Analysis | High-level project stats |
analyze_project_state |
Analysis | Detailed analysis with blockers |
get_feature_coverage |
Analysis | Feature implementation status |
get_schema |
Analysis | Entity schema definitions |
batch_update |
Bulk | Multiple operations in one call |
handle_entities |
Bulk | Unified batch handler |
cleanup_completed |
Bulk | Archive completed entities |
manage_workspaces |
Workspace | CRUD for workspaces |
list_workspaces |
Workspace | List all workspaces |
list_files |
Workspace | List files in workspace |
search_docs |
Semantic | Hybrid semantic search |
msrl_status |
Semantic | Index status |
read_docs |
Utility | Read document content |
update_doc |
Utility | Create/update documents |
rebuild_index |
Utility | Rebuild entity index |
manage_documents |
Document | Create/update decisions/docs |
Next Steps¶
- Semantic Search Guide - Learn semantic search workflows
- AI Workflows - AI-driven project management
- Entity Schemas - Complete entity field reference
- Plugin Commands - Visual canvas commands