Devon
This MCP server complements DEVONthink's built-in server by adding smart group/rule introspection, column layout management, email header parsing, advanced web capture, incremental tagging, and parameterized AI features — capabilities not available natively — alongside standard tools for search, CRUD, classification, and database operations.
Smart Groups & Rules
List all smart groups and smart rules (not accessible via AppleScript), including UUIDs, names, enabled state, and timestamps
Read and copy column layouts between smart groups/rules
Email Parsing
Extract MIME headers (Message-ID, References, In-Reply-To, Subject, From, To, Cc, Date) from
.emlfiles for thread correlation
Web Capture
Capture web pages with options for format, readability mode, custom user-agent, referrer, and PDF settings
Incremental Tagging
Add or remove specific tags from a record without replacing the entire tag set
AI Operations
Ask DEVONthink's AI about documents with control over model, engine (ChatGPT, Claude, Gemini, Mistral, etc.), and temperature
Create AI summary records in markdown, rich, sheet, or simple format
Check AI service health and retrieve AI tool documentation
Record Lookup & Fetching
Look up records by tags (any/all matching), contentHash, filename, path, URL, or comment
Fetch a single record by UUID or numeric ID
Database Info
Get the current frontmost database; list all open databases
Search
Full-text search with wildcards, group scoping, record type filters, and comparison modes
CRUD & Record Management
Create, read, update, delete, rename, move, duplicate, replicate, and convert records
Get/set properties including comments, flag, lock, and exclusion flags for AI, search, and tagging
Classification & Comparison
Get classification proposals and find similar/comparable records
Group Listing
List group contents by UUID or database root
Get currently selected records in DEVONthink
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., "@Devonsearch for 'Project Alpha' and summarize the main findings"
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.
Devon
DEVONthink MCP server for Claude Code. Zero-config setup — one command and you're done.
The focused complement to DEVONthink 4.2's built-in MCP server. DEVONthink now ships its own MCP server covering generic search, reads, and CRUD — so Devon deliberately exposes only the 15 tools where it does something the native server can't: smart-group and smart-rule introspection, column layouts, .eml header parsing, richer web capture, incremental tagging, and parameterized AI. All MIT-licensed, zero external dependencies beyond the MCP SDK. Run both servers side by side.
Quick start
If you have Claude Code, just ask:
"Hey Claude, clone Devon from github.com/mnott/Devon and set it up for me"
Claude will clone the repo, build it, configure ~/.claude.json, and enable the server. Restart Claude Code and Devon's tools are available alongside DEVONthink's built-in MCP server.
Related MCP server: DocuMCP
What it provides
Devon fills the gaps in DEVONthink's built-in MCP server. With it running, Claude Code can:
Enumerate smart groups and smart rules (read straight from DEVONthink's plists — the native scripting API doesn't expose these)
Read and copy column layouts for smart groups and rules
Parse
.emlMIME headers (Message-ID, References, In-Reply-To) for email thread correlationCapture web pages with rich options (format, readability, custom user-agent, referrer, PDF options)
Add and remove tags incrementally (the native tag tool only replaces the full set)
Ask DEVONthink's AI with model / engine / temperature control and create real summary records
For generic full-text search, record reads, and CRUD, use DEVONthink's built-in MCP server — Devon does not duplicate it. See Relationship to the built-in server.
List smart groups and smart rules (not accessible via AppleScript)
Parse EML headers for email thread correlation
Read and copy column layout configurations
Requirements
macOS (DEVONthink is macOS-only)
DEVONthink 3 or 4 installed and running
Node.js >= 18
Claude Code
Installation
Option 1: Ask Claude (recommended)
In Claude Code, ask Claude to set it up:
"Clone Devon from github.com/mnott/Devon into ~/dev/ai and configure it"
Claude clones, builds, configures ~/.claude.json, and enables the MCP server.
Option 2: Setup wizard
npx @tekmidian/devon setupInteractive CLI that checks prerequisites, configures ~/.claude.json, and enables the server.
Option 3: Clone and build
git clone https://github.com/mnott/Devon ~/dev/ai/devon
cd ~/dev/ai/devon
npm install
npm run build
node dist/index.js setupManual configuration
If you prefer to configure Claude Code manually, add this to the mcpServers section of ~/.claude.json:
"devonthink": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@tekmidian/devon", "serve"],
"env": {}
}Or if you have it installed locally:
"devonthink": {
"type": "stdio",
"command": "node",
"args": ["/path/to/devon/dist/index.js", "serve"],
"env": {}
}Restart Claude Code after editing ~/.claude.json.
Relationship to the built-in DEVONthink MCP server
DEVONthink 4.2 ships its own MCP server inside the app bundle
(/Applications/DEVONthink.app/Contents/Library/LoginItems/DEVONthink MCP.app),
also reachable over HTTP. It exposes ~59 tools covering generic search, reads,
CRUD, OCR, transcription, annotations, custom metadata, reminders, the link
graph, and DOI/CrossRef research.
Devon does not compete with it. Run both:
Built-in
devonthinkserver — everything generic:search_records,get_record_text,get_record_properties,create_record,move_record, batch operations, and all the native-only capabilities above.Devon — the 15-tool complement below: smart-group / smart-rule introspection, column layouts,
.emlheaders, richer web capture, incremental tagging, and parameterized AI — the things the built-in server can't do.
A full tool-by-tool capability differential lives in Notes/.
Tools
15 tools, each chosen because it does something DEVONthink's built-in MCP server can't (or does better).
Smart groups, rules & layouts
Read directly from DEVONthink's plists — the native scripting API does not expose these.
Tool | Description |
| Enumerate all smart groups (sync UUID, |
| Enumerate all smart rules (enabled state, |
| Read column layout (order, visible columns, widths) for a smart group or rule |
| Copy a column layout from one smart group/rule to another |
Tool | Description |
| Extract Message-ID, References, In-Reply-To, etc. from .eml files |
Web capture
Tool | Description |
| Capture a URL with |
Tags (incremental)
The native set_record_tags replaces the entire tag set; these add/remove individual tags.
Tool | Description |
| Add tags to a record without touching existing ones |
| Remove specific tags from a record |
AI
Tool | Description |
| Ask DEVONthink's AI with |
| Create a real DEVONthink summary record (native only returns text) |
| Check if DEVONthink's AI features are available |
| Get documentation for DEVONthink's AI capabilities |
Lookup & database
Tool | Description |
| Look up records — including by |
| Focused single-call fetch by UUID/identifier |
| Get the frontmost database (no native equivalent) |
Delegated to the built-in server
Devon intentionally does not ship these — DEVONthink's built-in MCP server does them as well or better (often with batch uuids support and its full query DSL): full-text search_records, classify_record, find_similar_records, get_record_text / extract_record_content, get_record_properties, create_record, update_record, update_record_content, move_record, duplicate_record, replicate_record, convert_record, trash_record, get_databases, get_group_tree, get_selected_records, is_running, plus everything native-only (OCR, transcription, annotations, custom metadata, reminders, link graph, DOI/CrossRef research, import/export, merge).
Usage
Once configured, Claude Code has access to all DEVONthink tools automatically. DEVONthink must be running with at least one database open.
Example prompts:
"Search my DEVONthink databases for notes about the Q3 budget"
"Find the email from John about the contract and show me related documents"
"Create a new markdown note in my Inbox with today's meeting notes"
"List all documents tagged 'todo' in my Ablegen database"
"Read the content of the PDF I imported yesterday"
"List my smart groups"
"Parse the headers from this .eml file to find its thread ID"
"Ask DEVONthink's AI to summarize these documents"
Custom tool reference
list_smart_groups
Parses ~/Library/Application Support/DEVONthink/SmartGroups.plist and returns all smart groups with their name, UUID, sync date, and UseUUIDKey flag.
Key limitation: Smart groups are not accessible via the DEVONthink AppleScript scripting dictionary. This tool is the only programmatic way to enumerate them.
Parameters: none
Returns:
Field | Type | Description |
| boolean | Whether the operation succeeded |
| array | List of smart group entries |
| number | Total number of smart groups found |
Each entry in smartGroups:
Field | Type | Description |
| string | Display name of the smart group |
| string | UUID from the |
| string | null | Last sync date (ISO 8601) |
| boolean | null | Whether DEVONthink uses UUID as the key internally |
list_smart_rules
Parses ~/Library/Application Support/DEVONthink/SmartRules.plist and returns all smart rules with name, UUID, enabled state, execution metadata, and sync date.
Parameters: none
Returns:
Field | Type | Description |
| boolean | Whether the operation succeeded |
| array | List of smart rule entries |
| number | Total number of smart rules found |
Each entry in smartRules:
Field | Type | Description |
| string | Display name of the smart rule |
| string | UUID from the |
| boolean | null | Whether the rule is currently enabled |
| number | null | Order index within the rules list |
| number | null | CFAbsoluteTime timestamp of last execution |
| string | null | Last sync date (ISO 8601) |
| boolean | null | Whether DEVONthink uses UUID as the key internally |
parse_eml_headers
Reads an RFC 2822 .eml file and extracts the MIME headers needed for email thread correlation.
Handles CRLF and LF line endings, folded headers (continuation lines), and RFC 2047 encoded words in Subject, From, and To fields.
Only reads the first 64 KB of the file since headers are always at the start.
Parameters:
Parameter | Type | Required | Description |
| string | yes | Absolute path to the |
Returns:
Field | Type | Description |
| boolean | Whether parsing succeeded |
| string | The path that was read |
| string | null | The |
| string | null | The |
| string[] | Array of message IDs from the |
| string | null | Decoded subject line |
| string | null | Sender address(es) |
| string | null | Recipient address(es) |
| string | null | CC address(es) |
| string | null | Date string from the header |
get_column_layout
Reads the column layout for a named smart group or smart rule from ~/Library/Preferences/com.devon-technologies.think.plist.
Returns the ordered visible columns, all table view columns (visible and hidden), and column widths. Supports partial name matching.
Parameters:
Parameter | Type | Required | Description |
| string | yes | Display name of the smart group or smart rule |
| string | no | UUID fallback if name lookup fails |
Returns:
Field | Type | Description |
| boolean | Whether a layout was found |
| string | The name that was searched |
| string | The actual plist key used |
| string[] | null | Visible columns in display order |
| string[] | null | All column identifiers (visible + hidden) |
| object | null | Map of column identifier to width |
| string[] | Which plist keys were present |
copy_column_layout
Copies the column layout from one smart group or smart rule to another. All layout keys are written atomically using Python's plistlib.
DEVONthink must be restarted (or the smart group window closed and reopened) for the change to take effect.
Parameters:
Parameter | Type | Required | Description |
| string | yes | Name of the source smart group |
| string | yes | Name of the target smart group |
| string | no | UUID fallback for the source |
| string | no | UUID for the target (layout written under UUID key) |
Workflows
Smart group discovery and content querying
Smart groups are virtual views defined by search criteria — they are not part of the AppleScript scripting dictionary. Use this two-step pattern:
Step 1: Enumerate all smart groups.
list_smart_groupsStep 2: Query the contents using the built-in server's search_records with group_uuid.
search_records (native devonthink server)
query: ""
group_uuid: "4A469368-94FD-46D3-9A62-ED7C24D822D8"Note: Devon supplies the smart-group UUID (via
list_smart_groups); the nativesearch_recordstool scopes to it withgroup_uuidand returns proper DEVONthink records with dates and correct UUIDs. Devon no longer ships its ownsearch/list_group_content— the built-in server covers those.
Email thread correlation
To link a live email thread back to its archived copy in DEVONthink, use a three-tier matching strategy:
Tier 1 — Thread ID match (highest precision)
get_record_properties uuid: <record_uuid>
parse_eml_headers filePath: "/path/to/archived/email.eml"Use messageId, inReplyTo, and references to correlate precisely.
Tier 2 — Subject and sender match
search query: "kind:email subject:\"Contract renewal\" from:jane@example.com"Strip Re:, Fwd:, AW:, WG: prefixes before searching.
Tier 3 — Subject only (broadest)
search query: "kind:email subject:\"Contract renewal\""Column layout management
get_column_layout name: "Archivieren - Jobs"
copy_column_layout sourceName: "Archivieren - Jobs" targetName: "New Smart Group"Close and reopen the smart group window (or restart DEVONthink) after copying.
DEVONthink search syntax
The search tool supports these operators:
Operator | Example | Description |
|
| Filter by record type |
|
| Match filename or subject |
|
| Email subject field |
|
| Sender address |
|
| Recipient address |
|
| Full-text content search |
|
| Tagged records |
|
| Date range ( |
Quotes |
| Exact phrase match |
AND/OR |
| Boolean operators |
Combining operators:
kind:email from:@company.com subject:"compensation" date:2023-01-01~2024-12-31How it works
devon is a standalone MCP server built on @modelcontextprotocol/sdk. All 15 tools are implemented from scratch under the MIT license with no external dependencies beyond the MCP SDK.
The tools communicate with DEVONthink via JXA (JavaScript for Automation) executed through osascript. A shared JXA executor handles script construction, escaping, and result parsing. The custom tools (smart groups, smart rules, column layouts) use PlistBuddy and Python's plistlib to read DEVONthink preference and data files directly.
Compatible with both DEVONthink 3 and DEVONthink 4, with automatic app name detection.
Troubleshooting
"DEVONthink not found"
Make sure DEVONthink 3 or 4 is installed in /Applications and running.
"No databases found" Open at least one DEVONthink database before using the MCP tools.
Tools not appearing in Claude Code
Verify
~/.claude.jsonhas thedevonthinkentryRestart Claude Code (not just a new session — fully quit and reopen)
Check that DEVONthink is running
AppleScript errors Grant Claude Code (or Terminal) Automation permissions in System Settings > Privacy & Security > Automation.
list_smart_groups returns no results or error
The plist format varies between DEVONthink versions. Use plutil -p ~/Library/Application\ Support/DEVONthink/SmartGroups.plist to inspect the raw format and report an issue.
get_column_layout returns "no layout found"
The smart group does not yet have a custom column layout saved. Use copy_column_layout to copy a layout from another smart group that already has one configured.
Credits
This project was inspired by dvcrn's mcp-server-devonthink, which demonstrated the potential of DEVONthink MCP integration. Version 3.0.0 was a clean-room rewrite; from v4.0.0 Devon narrows to the 15 tools that complement DEVONthink 4.2's own built-in MCP server rather than duplicating it. All tools are independently implemented under the MIT license.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/mnott/Devon'
If you have feedback or need assistance with the MCP directory API, please join our Discord server