MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Build a brand-new MCP integration from scratch with a guided wizard.
$ npx skills add davekilleen/Dex --skill create-mcp -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install davekilleen/Dex create-mcp --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/create-mcp .claude/skills/create-mcp && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "create-mcp" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcp into .claude/skills/create-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-mcp", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcpType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add davekilleen/Dex --skill create-mcp -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install davekilleen/Dex create-mcp --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/create-mcp .agents/skills/create-mcp && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-mcp" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcp into .agents/skills/create-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-mcp", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davekilleen/Dex --skill create-mcp -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install davekilleen/Dex create-mcp --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/create-mcp .cursor/skills/create-mcp && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "create-mcp" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcp into .cursor/skills/create-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-mcp", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/davekilleen/Dex.git --path .agents/skills/create-mcp--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add davekilleen/Dex --skill create-mcp -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install davekilleen/Dex create-mcp --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/create-mcp .gemini/skills/create-mcp && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "create-mcp" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcp into .gemini/skills/create-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-mcp", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install davekilleen/Dex create-mcpInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add davekilleen/Dex --skill create-mcp -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/create-mcp .github/skills/create-mcp && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "create-mcp" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcp into .github/skills/create-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-mcp", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davekilleen/Dex --skill create-mcp -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install davekilleen/Dex create-mcp --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/create-mcp .opencode/skills/create-mcp && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "create-mcp" agent skill from https://github.com/davekilleen/Dex/tree/main/.agents/skills/create-mcp into .opencode/skills/create-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-mcp", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
create-mcpBuild a brand-new MCP integration from scratch with a guided wizard.
Create MCP is an agent skill from davekilleen/Dex. Build a brand-new MCP integration from scratch with a guided wizard. Use when the user wants Dex to talk to a tool that has no existing server — 'build an integration for X', 'Dex can't connect to Y yet'. Not for installing an MCP that already exists; use integrate-mcp. Not for a prompt-only workflow with no external tool; use create-skill.
Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: Your AI Chief of Staff — a personal operating system starter kit that adapts to your role. No coding required. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 227f78e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pythonjustFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DEX_MCP_ONCE_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Create MCP loads about 5.6k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 1,110 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
[SERVICE]_API_KEY to your environment or .env file"d to your shell config / the vault-root `.env` file (keep `.env` owner-only: `chmod 600 .env`).Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from davekilleen/Dex at commit 227f78e, republished under its MIT licence (© davekilleen). 1,110 words, ~5,633 tokens.
.claude/skills/create-mcp/SKILL.md (or your agent's skills folder).<!-- Generated from `.claude/skills/create-mcp/SKILL.md` by `scripts/generate-agents-skills.py`. Do not edit. -->
In plain English: A guided wizard that helps you create and integrate an MCP server into Dex. No coding knowledge required - you describe what you want, we build it together.
When to use it:
How to run it:
/create-mcp # Starts the wizard from the beginning
/create-mcp "calendar" # Jumps ahead with a service hintAI models like Claude are fundamentally probabilistic - they generate responses by predicting the most likely next token based on patterns in their training data. This is powerful for reasoning and language, but dangerous for facts:
| Question | Without MCP | With MCP |
|---|---|---|
| "What's on my calendar today?" | "I don't have access to your calendar, but typically..." | Queries actual calendar, returns real events |
| "What are our top support tickets this week?" | "Based on typical patterns, around 10-15..." | Queries Zendesk: "32 tickets, 12 P0, avg response time 2.3hrs" |
| "Did Sarah email about the roadmap?" | "I can't access your email..." | Searches Gmail, finds 3 matching threads |
Without MCP, AI can only:
MCP (Model Context Protocol) provides guardrails and structure for AI interactions with external systems:
┌─────────────────────────────────────────────────────────────┐
│ YOUR QUESTION │
│ "What features are customers using most?" │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ AI REASONING │
│ "I need support ticket data. I have a Zendesk MCP tool │
│ called `get_ticket_stats`. Let me call it..." │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MCP TOOL CALL │
│ Tool: get_feature_usage │
│ Input: { "days": 30, "limit": 10 } │
│ ───────────────────────────────────────────────────────── │
│ │ GUARDRAILS: │ │
│ │ ✓ Defined input schema - can't send bad data │ │
│ │ ✓ Authenticated connection - uses real credentials │ │
│ │ ✓ Structured output - returns consistent format │ │
│ │ ✓ Deterministic - same query = same results │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ REAL DATA RESPONSE │
│ { "features": [ │
│ { "name": "Dashboard", "usage": 89% }, │
│ { "name": "Reports", "usage": 67% }, │
│ { "name": "Guides", "usage": 45% } │
│ ]} │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ AI SYNTHESIS │
│ "Your top 3 features by usage are Dashboard (89%), │
│ Reports (67%), and Guides (45%). Dashboard dominates - │
│ consider investing more there." │
└─────────────────────────────────────────────────────────────┘MCP doesn't make AI smarter - it gives AI reliable ways to get real data. The AI still does reasoning, synthesis, and explanation. But the facts come from deterministic tool calls, not probabilistic generation.
| Aspect | Probabilistic (AI alone) | Deterministic (MCP) |
|---|---|---|
| Data source | Training patterns | Live API calls |
| Accuracy | Plausible but unreliable | Exact (from source) |
| Freshness | Stale (training cutoff) | Real-time |
| Consistency | May vary per query | Same query = same data |
| Guardrails | None | Schema validation, auth, error handling |
🔌 **MCP Server Creation Wizard**
MCP (Model Context Protocol) lets Dex connect to external tools and services. Instead of guessing or saying "I don't have access", AI can query real data and give you accurate answers.
**The difference MCP makes:**
- ❌ Without: "I'd estimate you have around 10-15 support tickets..."
- ✅ With: "Zendesk shows 32 tickets, 12 high priority, avg response time 2.3hrs"
**Examples of what you can build:**
- 📅 Calendar → "What meetings do I have tomorrow? Who's attending?"
- 📧 Email → "Find emails from Sarah about the Q1 roadmap"
- 💬 Slack → "What did #product-team discuss today?"
- 📊 Analytics → "Show me feature adoption for our enterprise tier"
- 🔗 Any API → If it has an API, we can probably connect it
**Benefits:**
- Real data, not AI guessing
- Guardrails prevent hallucination
- Live queries, not stale training data
- Structured tools with validation
**This wizard will:**
1. Help you describe what you want to connect
2. Design the integration together
3. Generate the MCP server code
4. Integrate it into Dex
5. Update all documentation so future sessions know how to use it
Ready to get started? **What would you like to connect Dex to?**
(Just describe it in plain English — e.g., "my Google Calendar", "Notion database", "company CRM")Skip education and jump to Phase 1 with the hint as starting context.
Ask these questions (adapt based on what's already known):
Question 1: Service identification
What service or tool do you want to connect?
Examples:
- A specific app (Google Calendar, Notion, Salesforce)
- A type of data (my emails, my tasks, my documents)
- An API you have access to
Your answer:Question 2: Authentication
How do you currently access this service?
1. I log in with username/password
2. I have an API key
3. It uses OAuth (Google, Microsoft login)
4. It's a local file or database
5. Something else
This helps me understand what authentication we'll need.Question 3: Data of interest
What specific information do you want Dex to access?
Be specific about:
- What types of data (events, messages, records)
- What you'd want to read vs. write
- Any specific fields that matter most
Example: "I want to see my calendar events - title, time, attendees. Just reading, no need to create events."Question 4: Use cases
How would you actually use this in practice?
Give me 2-3 example questions or commands you'd want to ask:
- "Show me today's meetings"
- "Find emails from [person] about [topic]"
- "What's the status of [account]?"
This shapes what tools we'll build.**Understood. Here's what we're building:**
📦 **Service:** [service name]
🔐 **Auth method:** [auth type]
📊 **Data access:** [read/write + what data]
🎯 **Primary use cases:**
1. [use case 1]
2. [use case 2]
3. [use case 3]
Does this capture what you want? (yes / let me clarify)Based on use cases, propose tool designs:
**Proposed MCP Tools**
Based on your use cases, here's what I suggest building:
| Tool Name | What It Does | Example Usage |
|-----------|--------------|---------------|
| `[tool_1]` | [description] | "[natural language example]" |
| `[tool_2]` | [description] | "[natural language example]" |
| `[tool_3]` | [description] | "[natural language example]" |
**Input parameters for each:**
### `[tool_1]`
- `param_1` (required): [description]
- `param_2` (optional): [description]
### `[tool_2]`
...
**Questions:**
1. Do these tools cover your use cases?
2. Should any tool do more or less?
3. Are there additional scenarios I missed?Keep refining based on feedback. Ask focused questions:
**Final Tool Design**
We're building an MCP server called `[server-name]` with:
| Tool | Purpose | Inputs |
|------|---------|--------|
| [tool] | [purpose] | [inputs summary] |
**Authentication:** [method + what user needs to provide]
**Configuration:** [any env vars or config needed]
Ready to build? (yes / let me adjust)Step 3.1: Create the server file
Generate Python code following the pattern in core/mcp/work_server.py:
#!/usr/bin/env python3
"""
MCP Server for [Service Name]
[Brief description of what this server does]
Tools:
- [tool_1]: [description]
- [tool_2]: [description]
"""
import os
import json
import logging
from typing import Dict, List, Optional, Any
from datetime import datetime
from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationOptions
import mcp.server.stdio
import mcp.types as types
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Configuration from environment
[RELEVANT_CONFIG_VARS]
# ============================================================================
# SERVICE CLIENT
# ============================================================================
class [ServiceName]Client:
"""Client for interacting with [Service]"""
def __init__(self):
[initialization code]
[methods for each operation]
# ============================================================================
# MCP SERVER
# ============================================================================
app = Server("[server-name]-mcp")
client = [ServiceName]Client()
@app.list_tools()
async def handle_list_tools() -> list[types.Tool]:
"""List all available tools"""
return [
types.Tool(
name="[tool_name]",
description="[tool description]",
inputSchema={
"type": "object",
"properties": {
[property definitions]
},
"required": [required fields]
}
),
# ... more tools
]
@app.call_tool()
async def handle_call_tool(
name: str, arguments: dict | None
) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
"""Handle tool calls"""
if name == "[tool_name]":
[implementation]
return [types.TextContent(type="text", text=json.dumps(result, indent=2))]
# ... more tool handlers
return [types.TextContent(type="text", text=f"Unknown tool: {name}")]
async def _main():
"""Async main entry point"""
logger.info("Starting [Service] MCP Server")
async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
await app.run(
read_stream,
write_stream,
InitializationOptions(
server_name="[server-name]-mcp",
server_version="1.0.0",
capabilities=app.get_capabilities(
notification_options=NotificationOptions(),
experimental_capabilities={},
),
),
)
def main():
"""Sync entry point"""
import asyncio
asyncio.run(_main())
if __name__ == "__main__":
main()Save to: core/mcp/[service_name]_server.py
Step 3.2: Update requirements
Add any new dependencies to core/mcp/requirements.txt
Step 3.3: Create launcher script (if needed)
Create core/mcp/run_[service_name].sh:
#!/bin/bash
# Launch [Service] MCP server
cd "$(dirname "$0")"
source venv/bin/activate 2>/dev/null || true
python [service_name]_server.pyMake executable: chmod +x run_[service_name].sh
**Server Created!** ✅
Files generated:
- `core/mcp/[service_name]_server.py` — The MCP server
- `core/mcp/requirements.txt` — Updated with dependencies
**Before we integrate, you'll need to:**
[Auth-specific instructions based on Phase 1]
Examples:
- For API key: "Add [SERVICE]_API_KEY to your environment or .env file"
- For OAuth: "Run the OAuth setup script: `python core/mcp/setup_[service]_auth.py`"
- For local: "No additional setup needed"
Let me know when you're ready to integrate.Step 4.1: Update CLAUDE.md
Add to the Integration Options section or create new MCP section:
### [Service Name] Integration
**Server:** `core/mcp/[service_name]_server.py`
**Purpose:** [what it does]
**Available Tools:**
| Tool | What It Does | Example |
|------|--------------|---------|
| `[tool]` | [description] | "[natural example]" |
**Configuration Required:**
- `[ENV_VAR]`: [description]
**Usage examples:**
- "[natural language request]" → uses `[tool]` tool
- "[another request]" → uses `[another_tool]` toolStep 4.2: Add MCP Instructions (if not present)
Check if CLAUDE.md has mcp_instructions section. If not, add:
<mcp_instructions>
### [service-name]-mcp
[Description of the server and when to use it]
**Tools:**
- `[tool_name]`: [when to use and what it returns]
</mcp_instructions>Step 4.3: Update System Guide
Add to 06-Resources/Dex_System/Dex_System_Guide.md under Integration Options:
| **[Service]** | [Brief description of capabilities] |And add a new section if significant:
### [Service] MCP Server
Server: `core/mcp/[service_name]_server.py`
#### Available Tools
| Tool | Purpose |
|------|---------|
| `[tool]` | [description] |
#### Usage
[How to use in natural language, what to expect]
#### Configuration
| Variable | Description |
|----------|-------------|
| `[ENV_VAR]` | [what it's for] |Only a custom-* entry whose command is the current sys.executable and whose args
contain exactly one local .py file can use either startup check below.
remote, HTTP, npm, npx, and binary entries cannot be blessed; explain that they remain
structural-only.
Ask exactly once:
Want me to prove it starts? This runs it once from a private copy, with your user permissions, and trusts whatever it imports. The entry's configured
envis ignored. (yes / no)
Only after an explicit yes, issue a fresh token bound to this one entry and pass it to the check. The checker consumes and deletes the token before validating or launching anything, so it cannot be reused. The token prevents the automatic/recurring health checks from ever launching a one-off custom server and makes each explicit approval single-use. It is not protection against another program running as you, which could run your code directly regardless:
DEX_MCP_ONCE_TOKEN=$(./.venv/bin/python core/utils/smoke.py \
--issue-mcp-once-consent custom-[server-name]) || exit 1
./.venv/bin/python core/utils/smoke.py \
--check-mcp-once custom-[server-name] \
--consent-token "$DEX_MCP_ONCE_TOKEN"Show the command result honestly. A refusal or failed handshake is not permission to try
another command shape or issue another token. On no or an ambiguous answer, do not issue
a token and continue without running anything. The one-off check always uses a temporary
vault for both cwd and VAULT_PATH; it never launches the custom code against the live
vault as its working directory.
First inspect the eligible entry without executing it:
./.venv/bin/python -m core.utils.trust_registry --inspect-mcp custom-[server-name]Show the returned MCP name, vault-relative path, and sha256. Then ask:
Trust this exact file for recurring startup checks? This runs
<vault-relative path>with your user permissions (nightly and in deep scans), and trusts whatever it imports. Dex will run only a private copy of the exact content whose sha256 is<sha256>. If the file changes, Dex refuses to run it until you bless it again.Default: No. (yes / no)
On no or an ambiguous answer, do not create or modify System/trusted-mcps.yaml.
On an explicit yes, create the user-owned registry from its shipped template if absent, then bind the consent to the sha256 that was shown:
if [ ! -e System/trusted-mcps.yaml ]; then
cp -- System/trusted-mcps.example.yaml System/trusted-mcps.yaml
fi
./.venv/bin/python -m core.utils.trust_registry \
--bless-mcp custom-[server-name] --expected-sha256 <sha256>If either command refuses, report its reason and leave the entry unblessed. Never hand-add
a remote, HTTP, npm, npx, binary, flagged Python (-c or -m), absolute, or .. path.
Run verification checklist:
**Integration Complete!** 🎉
Let me verify everything is in place:
✅ Server created: `core/mcp/[service_name]_server.py`
✅ Dependencies updated: `core/mcp/requirements.txt`
✅ CLAUDE.md updated with integration docs
✅ System Guide updated
**To start using it:**
1. Install dependencies (if new ones added):cd core/mcp && pip install -r requirements.txt
2. Add your credentials:export [ENV_VAR]="your-value-here"
Or add to your shell config / the vault-root `.env` file (keep `.env` owner-only: `chmod 600 .env`).
3. Configure Claude Desktop to use the server:
Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"[server-name]": {
"command": "python",
"args": ["[full-path]/core/mcp/[service_name]_server.py"],
"env": {
"VAULT_PATH": "[full-path-to-dex]"
}
}
}
}The one-off and recurring checks above are always optional.
---
## Example Walkthrough
User: /create-mcp
Claude: [Shows education intro]
User: I want to connect my Todoist
Claude: Great choice! Let me understand what you need...
[Phase 1 questions]
User: I want to see my tasks, add new ones, and mark them complete. Example: "What's on my Todoist today?" or "Add 'buy groceries' to Todoist"
Claude: Understood. Here's what we're building:
📦 Service: Todoist 🔐 Auth method: API key (Todoist provides this) 📊 Data access: Read tasks, create tasks, update task status 🎯 Primary use cases:
Does this capture what you want?
User: Yes, but also let me filter by project
Claude: Got it! Adding project filtering...
[Phase 2 - Tool design]
Proposed MCP Tools
| Tool Name | What It Does |
|---|---|
list_tasks | Get tasks with filters (today, date range, project) |
create_task | Add a new task to Todoist |
complete_task | Mark a task as done |
list_projects | See available projects |
[Continues through phases...]
---
## Behaviors
### Always Do
- Start with education for new users
- Confirm understanding before building
- Generate complete, working code
- Update ALL documentation (CLAUDE.md, System Guide)
- Provide clear setup instructions
- Offer to help test
### Never Do
- Skip the design phase
- Generate partial/placeholder code
- Forget to update documentation
- Assume authentication works without explaining setup
- Create tools without clear use cases
### If stuck on technical details
- Search for the service's API documentation
- Check if an existing Python library handles auth
- Offer simpler alternatives if complexity is high
---
## Integration Checklist
After completion, verify:
- [ ] Server file created in `core/mcp/`
- [ ] Requirements.txt updated
- [ ] CLAUDE.md has integration documentation
- [ ] System Guide updated with new capabilities
- [ ] Setup instructions are clear and complete
- [ ] Example queries provided for testing
### Analytics (Required)
- [ ] Events defined for key tools (e.g., `{tool}_used`)
- [ ] Added checkbox to `System/usage_log.md` (Integrations section)
- [ ] Privacy verified: only tracks that feature was used, not content
See `.claude/reference/skill-analytics-checklist.md` for detailed guidance.
- [ ] User knows how to configure Claude to use the server
---
## Track Usage (Silent)
Call the `mark_feature_used` tool on the `dex-analytics` MCP server with `create-mcp`. This ticks the feature's box in `System/usage_log.md`, which is what `/dex-level-up` reads to recommend features that have not been tried. It writes locally and sends nothing, so it runs whether or not analytics is enabled.
**Analytics (Silent):**
Call `track_event` with event_name `mcp_created` and properties:
- (no properties — do NOT include service names)
This only fires if the user has opted into analytics. No action needed if it returns "analytics_disabled".© davekilleen, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/create-mcp of davekilleen/Dex.
Open the folder on GitHubat commit 227f78e
Create MCP next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Create MCP this skilldavekilleen/Dex | 493 | — | ~5.6k | Automated safety check: Notes | MIT | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Crush Configurationcharmbracelet/crush | 29k | — | ~3.7k | Automated safety check: Pass | Custom licence | |
| Context Mode Output Sandboxmksglu/context-mode | 26k | — | ~4.1k | Automated safety check: Pass | Custom licence |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
charmbracelet/crush
Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.
mksglu/context-mode
Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.
warpdotdev/warp
Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.
davekilleen/Dex
This skill should be used when working with DSPy.rb, a Ruby framework for building type-safe, composable LLM applications.
davekilleen/Dex
Adopt a full published Heydex profile by handle ('set me up like @davekilleen').
davekilleen/Dex
Package one workflow — how you use Dex for a specific job — into a shareable DexDiff methodology doc.
davekilleen/Dex
Expert guidance for creating, writing, and refining Claude Code Skills.
davekilleen/Dex
Report a Dex bug to the Dex team with zero homework — Dex investigates locally, builds a privacy-safe report, shows it to you (or auto-sends if you've chosen that), and tracks the ticket until it's…
davekilleen/Dex
This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style.
Works with
Categories
Build a brand-new MCP integration from scratch with a guided wizard. Create MCP is an agent skill from davekilleen/Dex. Build a brand-new MCP integration from scratch with a guided wizard.
Create MCP fits situations like: the user wants Dex to talk to a tool that has no existing server — build an integration for X; dex cant connect to Y yet.
Run `npx skills add davekilleen/Dex --skill create-mcp -a claude-code`. Or copy the skill folder (.agents/skills/create-mcp in davekilleen/Dex) into .claude/skills/create-mcp in your project. Claude Code loads it when a task matches its description.
Run `npx skills add davekilleen/Dex --skill create-mcp -a codex`. Or copy the skill folder (.agents/skills/create-mcp in davekilleen/Dex) into .agents/skills/create-mcp in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add davekilleen/Dex --skill create-mcp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-mcp, .gemini/skills/create-mcp, .github/skills/create-mcp and .opencode/skills/create-mcp in your project.
Going by SKILL.md and its folder, Create MCP needs the command-line tools its instructions call (python and just) and credentials named DEX_MCP_ONCE_TOKEN. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Create MCP is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.6k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Create MCP: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Crush Configuration (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
davekilleen (a GitHub user) maintains it in davekilleen/Dex, which has 493 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on October 8, 2026.
Source: davekilleen/Dex on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.