Skip to main content
Glama
org-mobicycle-ee

Cloudflare Email MCP Server

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 login

Installation

bun install
bun run build
bun start

Usage

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 scripts

Building

bun run build    # TypeScript compilation
bun run dev     # Watch mode

Testing

# 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-id

Automation

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

  1. Bridge receives emails in configured folders

  2. MCP server syncs new emails to KV namespaces

  3. AI triage system processes pending emails

  4. Status updates track workflow progress

License

Internal MobiCycle OÜ project - Not for public distribution

Available Tools

9 tools
email_folder_statsC

Get email processing statistics for a specific folder

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_nameYesIMAP folder name

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax emails to process per folder
sinceNoISO date string - only process emails since this date
dry_runNoSimulate without storing
foldersNoSpecific folders to process (if empty, processes all approved folders)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to delete
namespace_idYesKV namespace ID

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to retrieve
namespace_idYesKV namespace ID

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to write
valueYesValue to store
metadataNoOptional metadata
namespace_idYesKV namespace ID

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYesArray of keys (max 100)
namespace_idYesKV namespace ID

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNoOptional key prefix filter
namespace_idYesKV namespace ID

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax keys to return per page (default 1000)
cursorNoPagination cursor from previous call
prefixNoOptional key prefix filter
namespace_idYesKV namespace ID

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 9 tool updatesv1.0.0
    • First observedemail_folder_stats
    • First observedemail_list_folders
    • First observedemail_transfer_folders
    • First observedkv_key_delete
    • First observedkv_key_get
    • First observedkv_key_put
    • First observedkv_keys_bulk_get
    • First observedkv_keys_count
    • First observedkv_keys_list

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation5/5

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.

Naming Consistency4/5

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'.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to send, read, search, and organize emails via ProtonMail using Proton Bridge. Supports MCP-compatible clients like Claude and Cursor.
    17
    9 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provisions own-domain email for families using Cloudflare's API, enabling automatic setup of email routing, catch-all forwarding, and verified destinations.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Cloudflare Worker implementation of the Cypht email MCP, providing eight email tools for account management, email sending, listing, viewing, searching, and deletion via IMAP.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with a Proton Mail mailbox through Proton Bridge, supporting listing, searching, reading, sending, and organizing emails.
    -