Cloudflare Email MCP Server
Provides tools for managing Cloudflare KV namespaces, including key operations (list, get, put, delete) and automated email processing from ProtonMail Bridge to KV storage with folder mapping and status tracking.
Integrates with ProtonMail Bridge to automatically transfer emails from pre-configured IMAP folders (courts, government, complaints, parties) to corresponding Cloudflare KV namespaces, with body storage separated by year and UUID v5 body IDs.
Click on "Deploy 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., "@Cloudflare Email MCP ServerSync new emails from INBOX/Complaints/ICO"
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.
Cloudflare Email MCP Server
A comprehensive Model Context Protocol server for Cloudflare KV operations and automated email processing from ProtonMail Bridge to Cloudflare KV namespaces.
Features
KV Operations
Key Management: List, count, get, put, delete keys in any KV namespace
Pagination: Handle large datasets with cursor-based pagination
Bulk Operations: Retrieve multiple keys efficiently
Email Processing
Automated Transfer: Move emails from specific IMAP folders to corresponding KV namespaces
UUID v5 Body IDs: Deterministic body identification with separate storage
Folder Mapping: Pre-configured mappings for court, government, and legal correspondence
Status Tracking: Pending/processed status for workflow management
Related MCP server: own-domain-mcp
Architecture
Two-Tier Storage
Court KV Namespace:
├── Key: 2026.02.09_casework_ico_org_uk_10-30-45
└── Value: {
"from": "casework@ico.org.uk",
"to": "rose@mobicycle.ee",
"subject": "Your complaint reference IC-...",
"body": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"namespace": "ICO Complaints",
"status": "pending"
}
Body KV Namespace (by year):
├── Key: f47ac10b-58cc-4372-a567-0e02b2c3d479
└── Value: { "text": "Dear Ms Liu..." }Folder Mappings
Automatically processes emails from:
Courts: Appeal, Chancery, Admin Court, King's Bench, Supreme, etc.
Government: GLD, US State Dept, Estonian Government
Complaints: HMCTS, ICO, PHSO, Bar Standards, Parliament
Parties: Liu Litigation, HK Law, Lessel Property, etc.
Setup
Prerequisites
Bun runtime
ProtonMail Bridge running locally
Cloudflare account with KV access
Wrangler CLI configured
Authentication
The server uses Wrangler OAuth tokens automatically:
wrangler auth loginInstallation
bun install
bun run build
bun startUsage
MCP Tools
KV Operations
// Count keys in a namespace
kv_keys_count({
namespace_id: "your-namespace-id",
prefix: "email:"
})
// List keys with pagination
kv_keys_list({
namespace_id: "your-namespace-id",
prefix: "2026.02",
limit: 100,
cursor: "next-page-cursor"
})
// Get/set individual values
kv_key_get({ namespace_id: "...", key: "..." })
kv_key_put({ namespace_id: "...", key: "...", value: "..." })Email Processing
// Transfer emails from approved folders
email_transfer_folders({
folders: ["INBOX/Courts/Supreme"],
since: "2026-02-01T00:00:00Z",
dry_run: true
})
// Check processing stats
email_folder_stats({
folder_name: "INBOX/Complaints/ICO"
})
// List all folders and their approval status
email_list_folders()Configuration
Approved Folders
Only pre-configured folders automatically sync to KV:
Legal correspondence folders
Court communications
Government agencies
Complaint systems
KV Namespaces
Court namespaces: One per jurisdiction
Body storage: Separated by year (
email-bodies-2026)Account mapping: Bridge gRPC account information
Development
Project Structure
src/
├── index.ts # Main MCP server with stdio transport
├── cloudflare-api.ts # KV operations via Cloudflare API
└── email-processor.ts # IMAP to KV sync logic
dist/ # Built JavaScript
README.md # This file
package.json # Dependencies and scriptsBuilding
bun run build # TypeScript compilation
bun run dev # Watch modeTesting
# Dry run email processing
email_transfer_folders({ dry_run: true })
# Test KV operations
kv_keys_count({ namespace_id: "test-namespace" })Integration
Claude Code MCP Configuration
Add to Claude Code MCP settings:
{
"mcpServers": {
"cloudflare-email": {
"command": "bun",
"args": ["start"],
"cwd": "/path/to/this/directory"
}
}
}Environment Variables
# Optional - detected automatically from wrangler
CLOUDFLARE_API_TOKEN=your-token
CLOUDFLARE_ACCOUNT_ID=your-account-idAutomation
Bridge Integration
Works with ProtonMail Bridge gRPC for account mapping:
Automatic token capture on Bridge restart
Account structure pushed to KV
Prevents email double-counting
Workflow
Bridge receives emails in configured folders
MCP server syncs new emails to KV namespaces
AI triage system processes pending emails
Status updates track workflow progress
License
Internal MobiCycle OÜ project - Not for public distribution
Available Tools
9 toolsemail_folder_statsC
Get email processing statistics for a specific folder
| Name | Required | Description | Default |
|---|---|---|---|
| folder_name | Yes | IMAP folder name |
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 of behavioral disclosure. The 'Get' verb implies a read-only operation, but there is no mention of side effects, authentication requirements, error scenarios, or return structure. This leaves a significant transparency gap.
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 a single, front-loaded sentence, 'Get email processing statistics for a specific folder', containing no wasted words. It is appropriately concise, even though it may be underspecified in other dimensions.
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?
There is no output schema, so the description must explain return values, but it only vaguely says 'statistics' without specifying what data is included. It also does not mention behavior for nonexistent folders or how to obtain folder names. For a single-parameter tool, the description is incomplete.
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?
The input schema fully documents the single parameter folder_name with description 'IMAP folder name' (100% coverage). The tool description adds no additional semantic detail about accepted formats, default behavior, or how to source valid folder names. With high schema coverage, the baseline is 3, and no extra value is added.
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 the action ('Get') and resource ('email processing statistics') scoped to a specific folder. It is distinct from sibling tools like email_list_folders and email_transfer_folders, which are about listing and transferring folders, but it does not explicitly differentiate from alternatives, and the exact content of the statistics is unspecified.
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 no guidance on when to use this tool versus alternatives, no preconditions, and no mention of related tools like email_list_folders to validate folder names. It is simply a statement of functionality, offering no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_list_foldersA
List IMAP folders and show which ones are approved for auto-sync to KV
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the core behavior (listing folders and showing approval status) but does not mention whether the operation is read-only, potential network dependencies, or return format details. However, 'List' implies a safe read operation, and the additional approval detail adds useful context.
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 a single, concise sentence that front-loads the primary action ('List') and immediately provides the key detail about approval status. No unnecessary words or repetition, making it an efficient and well-structured description.
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?
For a simple tool with no parameters, no output schema, and no annotations, the description adequately conveys the purpose and the nature of the output (folder list with approval flags). It does not explain return data structure or error conditions, but for this level of complexity, the description is reasonably complete.
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?
The tool has zero parameters, so the schema provides no parameter details. Per the rubric, a baseline of 4 is appropriate for 0-param tools. The description adds nothing about parameters since none exist, but it also does not need to compensate for any missing schema information.
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 the tool's function: to list IMAP folders and indicate which are approved for auto-sync to KV. It uses a specific verb (List) and resource (IMAP folders), and adds a unique aspect (approval status) that distinguishes it from siblings like email_folder_stats or email_transfer_folders.
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 implies usage when you need to list IMAP folders and check their sync approval status, but it does not explicitly state when to use this tool vs. alternatives or provide exclusion criteria. Since this is a simple read-only list tool, the context is sufficient but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_transfer_foldersB
Transfer emails from approved IMAP folders to their mapped KV namespaces
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max emails to process per folder | |
| since | No | ISO date string - only process emails since this date | |
| dry_run | No | Simulate without storing | |
| folders | No | Specific folders to process (if empty, processes all approved folders) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects and constraints. It does not mention whether the transfer is a copy or move, what 'approved' or 'mapped' means, or any potential destructive behavior, leaving the agent without critical safety information.
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 a single concise sentence that front-loads the action and resource. It contains no redundant words and is easily scanned.
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?
For a bulk transfer tool with no output schema and no annotations, the description is too sparse. It lacks information about return values, error conditions, the mapping mechanism, or what happens to source emails, leaving significant gaps for an agent to infer.
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 100% for all four parameters, so the baseline is 3. The description adds no extra parameter semantics beyond the schema, but it is not required to compensate given the high coverage.
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 a specific verb ('Transfer'), resource ('emails'), and target ('KV namespaces'), and it distinguishes itself from sibling tools like kv_key_get and email_folder_stats by describing a bulk transfer action rather than individual operations.
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?
No guidance is given about when to use this tool instead of alternatives such as individual kv_key_put calls or email_folder_stats. The description only states what the tool does, not the context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv_key_deleteA
Delete a key from a KV namespace
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to delete | |
| namespace_id | Yes | KV namespace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the destructive action ('Delete') but does not disclose permissions required, whether deletion is reversible, error behavior (e.g., deleting a non-existent key), or any side effects. This is a minimal disclosure for a mutating operation.
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 a single concise sentence with no redundancy. Every word contributes to clarifying the operation, making it highly efficient and appropriately sized for the tool's simplicity.
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?
For a simple two-parameter delete operation, the description adequately states the core function. However, it omits important context such as return value expectations (e.g., whether it acknowledges deletion of non-existent keys), idempotency, or any prerequisites. Given the lack of annotations and output schema, the description is minimally complete but not thorough.
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?
The input schema already describes both parameters ('Key to delete' and 'KV namespace ID') with 100% coverage. The description adds no additional meaning about parameter formats, relationships, or constraints, so the baseline score of 3 is appropriate.
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 'Delete a key from a KV namespace' uses a specific verb ('Delete') and clearly identifies the resource ('a key') and context ('KV namespace'). This distinguishes it from sibling tools like kv_key_get, kv_key_put, and kv_keys_list, making the operation unambiguous.
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 implies the tool is for removing a key, but it does not explicitly state when to use it versus alternatives, nor does it mention when not to use it (e.g., for bulk operations). The intended usage is clear from the name and description, but no explicit guidance or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv_key_getA
Get the value of a single key from a KV namespace
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to retrieve | |
| namespace_id | Yes | KV namespace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic action and does not address what happens on missing keys, error conditions, or return value specifics, leaving significant gaps for a read operation.
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 a single, concise sentence with no unnecessary words. It is front-loaded and immediately clear, making it highly efficient.
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?
The tool is simple and schema covers parameters, but there is no output schema or annotations. The description does not mention return format, missing key behavior, or errors, making it minimally acceptable but not fully complete for a straightforward KV get.
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?
The input schema already describes both parameters ('Key to retrieve' and 'KV namespace ID') with 100% coverage. The description adds no additional parameter-specific context, so the baseline of 3 is appropriate.
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 uses a specific verb ('Get') and identifies the resource ('value of a single key from a KV namespace'), clearly distinguishing it from sibling tools like kv_keys_list, kv_key_put, kv_key_delete, and kv_keys_bulk_get.
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 states what the tool does but does not provide explicit guidance on when to use it versus alternatives such as kv_keys_bulk_get for multiple keys or kv_keys_list for listing keys. Usage context is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv_key_putB
Write a key-value pair to a KV namespace
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to write | |
| value | Yes | Value to store | |
| metadata | No | Optional metadata | |
| namespace_id | Yes | KV namespace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It only states that it 'writes' a pair, but does not reveal whether it overwrites existing keys, whether it is idempotent, what permissions are required, or what the response contains. This lack of transparency is critical for a mutation 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 a single compact sentence of eight words, front-loaded with the core action ('Write') and resource. Every word is necessary, with no filler or redundant restatement of the tool name or schema.
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 lack of annotations and output schema, the description should compensate by explaining the write behavior, return value, and any side effects. It only provides the basic operation, leaving the agent without essential context for a write tool. This is a significant completeness gap.
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?
The input schema describes all four parameters (namespace_id, key, value, metadata) with 100% coverage, so the description does not need to repeat them. The description adds no extra meaning beyond the schema, but the schema already provides adequate semantics. Baseline 3 is appropriate.
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 the action (write) and the resource (key-value pair to a KV namespace), which distinguishes it from sibling tools like kv_key_get, kv_key_delete, and kv_keys_list. The verb and resource are specific and unambiguous.
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 no explicit guidance on when to use this tool versus alternatives. There is no mention of prerequisites, scenarios, or exclusions, leaving the agent to infer from sibling names alone. Context signals are not part of the description and do not compensate for this gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv_keys_bulk_getB
Get values for multiple keys from a KV namespace
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | Array of keys (max 100) | |
| namespace_id | Yes | KV namespace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry behavioral transparency. It only states 'get values' without disclosing missing-key behavior, error handling, namespace validation, or response structure.
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?
Single sentence, front-loaded, with no filler. Communicates core operation efficiently.
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?
Minimal tool with no output schema and no annotations; description omits return value details, edge cases (e.g., missing keys, partial failures), and any prerequisites. Inadequate for agent to fully predict invocation outcome.
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 provides 100% parameter descriptions for namespace_id and keys, so description adds little. It does clarify the tool works with multiple keys but adds no semantics beyond 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?
Clear verb ('Get') + specific resource ('multiple keys from a KV namespace'). Distinguishes from sibling kv_key_get by explicitly indicating bulk operation.
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?
Description implies bulk retrieval use case but doesn't explicitly state when to use over kv_key_get or alternatives. No exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv_keys_countA
Count total keys in a KV namespace with optional prefix filter
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | Optional key prefix filter | |
| namespace_id | Yes | KV namespace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits, but it only states the action. It does not mention whether the operation is read-only, what the return format is (e.g., a number vs. an object), or any performance implications. This is a significant gap for an agent invoking the 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 a single, focused sentence that front-loads the core action ('Count total keys') followed by the optional modifier. There is no wasted verbiage.
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?
The tool is simple and the schema covers all parameters, but the description omits the return value format (expected for a count operation) and any edge-case behavior (e.g., empty namespace). Without an output schema or annotation, this leaves some ambiguity.
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 100%, so the parameters are already fully documented. The description adds no extra meaning beyond restating the optional prefix filter, which is already in the schema. Baseline 3 is appropriate.
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 the tool's function: 'Count total keys in a KV namespace' with an optional prefix filter. The verb 'Count' and resource 'KV namespace' distinguish it from sibling tools like kv_keys_list (which lists keys) and kv_key_get (which retrieves a single key).
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 implies usage when a count of keys is needed, but it does not explicitly mention alternatives or provide exclusions. There is no guidance on when to choose this over kv_keys_list or other tools, leaving the agent to infer from the tool name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv_keys_listA
List keys in a Cloudflare KV namespace with optional prefix filtering and pagination
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max keys to return per page (default 1000) | |
| cursor | No | Pagination cursor from previous call | |
| prefix | No | Optional key prefix filter | |
| namespace_id | Yes | KV namespace ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It discloses prefix filtering and pagination capabilities, which are also in the schema. However, it does not mention read-only nature, permissions, rate limits, or return format. The read-only nature is implied but not explicitly stated.
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 a single sentence of 14 words, front-loaded with the verb 'List'. Every word contributes value with no redundancy.
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?
This is a simple list tool with high schema coverage and no output schema. The description covers the core operation but does not explicitly state that the response includes a pagination cursor. Given the low complexity and schema richness, it is mostly complete.
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?
All 4 parameters are fully described in the schema (100% coverage). The description adds no additional parameter semantics beyond mentioning prefix filtering and pagination, which are already captured by the schema descriptions.
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 uses a specific verb and resource: 'List keys in a Cloudflare KV namespace'. This clearly distinguishes it from sibling tools like kv_key_get and kv_key_put. Mentioning 'optional prefix filtering and pagination' further scopes the operation.
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 implies usage (you use it to list keys), but provides no explicit when-to-use or when-not-to-use guidance. It does not name alternatives like kv_keys_count or kv_keys_bulk_get, leaving the selection decision to the agent's inference.
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.
9 tool updates
v1.0.0- First observed
email_folder_stats - First observed
email_list_folders - First observed
email_transfer_folders - First observed
kv_key_delete - First observed
kv_key_get - First observed
kv_key_put - First observed
kv_keys_bulk_get - First observed
kv_keys_count - First observed
kv_keys_list
TDQS
Scored across 9 tools
Every tool has a clear, distinct purpose: KV operations are separated into list/count/get/put/delete/bulk_get, and email operations are separated into transfer/list/stats. There is no ambiguity between tools, even the single-key vs bulk-key get tools are clearly differentiated.
The naming pattern is mostly consistent: KV tools use 'kv_' prefix plus resource (key/keys) plus action (list/get/put/delete), and email tools use 'email_' prefix plus action or noun. Slight inconsistencies exist like 'email_folder_stats' being noun-based rather than verb-based, and 'kv_keys_bulk_get' differs slightly in word order from 'kv_key_get'.
The 9 tools cover two clear functional areas—KV key-value storage and email-to-KV transfer—without unnecessary overlap or bloat. This is within the ideal range for a purpose-built server.
The KV tools cover the core CRUD operations (get, put, delete, list, count) and add a useful bulk read. The email tools provide list, transfer, and stats, but lack configuration operations like approving folders or updating mappings, which are minor gaps that can be worked around via external configuration.
Maintenance
Related MCP Connectors
The bridge from K2 agents through Wrangler to your master AI - safe, approval-gated Cloudflare ops.
- Lettio MCPOAutheu.lettio
Private, EU-hosted email for AI agents over JMAP: read, search, reply, organize, send.
Your mailboxes in ChatGPT and Claude: Gmail, iCloud, Fastmail, any IMAP. Passwords stay yours.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI agents to send, read, search, and organize emails via ProtonMail using Proton Bridge. Supports MCP-compatible clients like Claude and Cursor.179 npm4MIT
- AlicenseNot gradedqualityCmaintenanceProvisions own-domain email for families using Cloudflare's API, enabling automatic setup of email routing, catch-all forwarding, and verified destinations.MIT
- FlicenseNot gradedqualityBmaintenanceCloudflare Worker implementation of the Cypht email MCP, providing eight email tools for account management, email sending, listing, viewing, searching, and deletion via IMAP.-
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with a Proton Mail mailbox through Proton Bridge, supporting listing, searching, reading, sending, and organizing emails.-