mcp-server
This skill should be used when the user asks to "create an MCP server", "build MCP tools", "define MCP prompts", "register MCP resources", "implement Model Context Protocol", or mentions the mcp gem, MCP::Server, MCP::Tool, JSON-RPC transport, stdio transport, or streamable HTTP transport. Should also be used when editing MCP server files, working with tool/prompt/resource definitions, or discussing LLM tool integrations in Ruby.
What this skill does
# MCP Ruby SDK - Server Development Guide
Build Model Context Protocol servers in Ruby using the official `mcp` gem (maintained by Anthropic and Shopify).
## Design Philosophy
### Information Provider, Not Analyzer
MCP servers provide structured data; LLMs do the reasoning. Return comprehensive frameworks and raw information—let the client perform analysis and context-dependent decisions.
> "The MCP server's job is to be the world's best research assistant, not a competing analyst." — Matt Adams
### Context Preservation
Agents have limited context windows. Every byte returned that wasn't requested is a byte that could have held useful context. Treat context preservation as a first-class design constraint.
**Principles:**
- Never return data that wasn't explicitly requested
- Mutations are quiet—return confirmations, not data dumps
- Explicit over implicit—associations only when asked
- Filter large datasets before returning (10,000 rows → 5 relevant rows)
### Domain-Aligned Vocabulary
Tools should speak the language of your domain, not database/CRUD terminology. Agents are collaborators in your domain process, not database clients.
**Example:** A visual novel asset server uses `create_image`, `make_sprite`, `place_character`, `explore_variations`, `compare_images`—not `generate`, `remove_background`, `composite`, `batch_generate`, `get_diff`.
### Tool Budget Management
Too many tools overwhelm agents and increase costs. Design toolsets around clear use cases, not API endpoint mirrors.
- Group related functionality intelligently
- Use lazy loading for large tool sets (150K tokens → 2K via on-demand discovery)
- Tool names ≤64 characters, descriptions narrow and unambiguous
### Security: The Lethal Trifecta
Three capabilities that, when combined, create vulnerabilities (Simon Willison):
1. Access to private data
2. Exposure to untrusted content
3. External communication capabilities
**Required:** Explicit user consent before tool invocation, clear UI showing exposed tools, alerts when tool descriptions change.
## Domain Components
| Component | Purpose | Reference |
|-----------|---------|-----------|
| **Tools** | Define callable functions with input/output schemas | [`references/tools.md`](references/tools.md) |
| **Prompts** | Template-based message generators | [`references/prompts.md`](references/prompts.md) |
| **Resources** | Static and dynamic file/data registration | [`references/resources.md`](references/resources.md) |
| **Server** | Core server initialization and configuration | [`references/server.md`](references/server.md) |
| **Transport** | STDIO and HTTP transport options | [`references/transport.md`](references/transport.md) |
| **Gotchas** | Tricky behaviors and error handling | [`references/gotchas.md`](references/gotchas.md) |
## Key Concepts
| Concept | Purpose |
|---------|---------|
| `MCP::Tool` | Base class for defining callable tools |
| `MCP::Prompt` | Base class for prompt templates |
| `MCP::Resource` | Static resource registration |
| `MCP::ResourceTemplate` | Dynamic URI-based resources |
| `server_context` | Request-scoped data passed to handlers |
| `MCP::Tool::Response` | Structured tool return value |
## Tool Definition Patterns
| Pattern | Use Case |
|---------|----------|
| Class-based (`< MCP::Tool`) | Reusable tools with complex logic |
| Block-based (`MCP::Tool.define`) | Inline, simple tools |
| Dynamic (`server.define_tool`) | Runtime tool registration |
## Transport Decision Tree
```
What environment?
├── CLI tool / Local server
│ └── Use STDIO transport
└── Web server / Production
└── Need sessions and notifications?
├── YES → Use Streamable HTTP (stateful)
└── NO → Use Streamable HTTP (stateless)
```
### Quick Comparison
| Transport | Sessions | Notifications | Use For |
|-----------|----------|---------------|---------|
| STDIO | N/A | Yes | CLI tools, local dev |
| HTTP (stateful) | Yes | Yes | Web apps, long-lived connections |
| HTTP (stateless) | No | No | Simple request/response APIs |
## Protocol Version Features
| Feature | Minimum Version |
|---------|-----------------|
| `description` | 2025-11-25 |
| `instructions` | 2025-03-26 |
| `annotations` | 2025-03-26 |
| `output_schema` | 2025-03-26 |
## Best Practices
### Do
- Use `tool_name` for namespaced classes to avoid conflicts
- Use `additionalProperties: false` for strict schema validation
- Use mutex for shared state in HTTP transport (thread safety)
- Return error responses for business errors (`Response.new([...], error: true)`)
- Check protocol version before using newer features
- Use `server_context` for request-scoped data (user_id, env)
### Don't
- Don't use `$ref` in schemas (raises ArgumentError, inline only)
- Don't assume extra args are rejected (`additionalProperties` defaults to allowing extras)
- Don't use `rpc.` prefix (reserved for protocol methods)
- Don't send notifications in stateless mode (raises RuntimeError)
- Don't rely on validation order (required args checked before JSON Schema)
## Anti-Patterns Quick List
| Anti-Pattern | Solution |
|--------------|----------|
| Missing `additionalProperties: false` | Add to schema for strict validation |
| Using `$ref` in schemas | Inline all definitions |
| Notifications in stateless mode | Use stateful transport or skip notifications |
| Hardcoded server_context | Pass dynamically based on request |
| Ignoring protocol version | Check version before using gated features |
| Blocking in tool handlers | Use async patterns for long operations |
## Key Points
1. **Validation is multi-layered** - Required args checked first, then JSON Schema validation
2. **Notifications are fire-and-forget** - Errors reported but don't propagate
3. **Protocol version matters** - Features are gated by version
4. **Server context is opt-in** - Detected from method signature (must include `server_context:` parameter)
5. **Schemas are immutable** - Validated at class load time, not runtime
## Additional Resources
### Reference Files
For detailed DSL syntax by domain:
- **`references/tools.md`** - Tool definition, responses, schemas, annotations
- **`references/prompts.md`** - Prompt definition, arguments, content types
- **`references/resources.md`** - Resource registration, templates, read handlers
- **`references/server.md`** - Server initialization, configuration, custom methods
- **`references/transport.md`** - Transport config, protocol methods, sessions
- **`references/gotchas.md`** - Tricky behaviors, error handling, edge cases
### Example Files
Working examples in `examples/`:
- **`examples/stdio_server.rb`** - Complete STDIO server with tools, prompts, resources
- **`examples/http_server.rb`** - HTTP server with Rack and logging
- **`examples/rails_integration.rb`** - Rails controller, routes, and initializer
- **`examples/file_manager_tool.rb`** - Sandboxed file operations with security patterns
- **`examples/dynamic_tools.rb`** - Runtime tool registration with notifications
- **`examples/http_client.rb`** - HTTP client connecting to MCP server
- **`examples/streaming_client.rb`** - SSE streaming client for real-time notifications
### External Links
- [MCP Ruby SDK on GitHub](https://github.com/modelcontextprotocol/ruby-sdk)
- [MCP Protocol Specification](https://modelcontextprotocol.io)
- [RubyDoc API Reference](https://rubydoc.info/gems/mcp)
Related in AI Agents
skill-development
IncludedComprehensive meta-skill for creating, managing, validating, auditing, and distributing Claude Code skills and slash commands (unified in v2.1.3+). Provides skill templates, creation workflows, validation patterns, audit checklists, naming conventions, YAML frontmatter guidance, progressive disclosure examples, and best practices lookup. Use when creating new skills, validating existing skills, auditing skill quality, understanding skill architecture, needing skill templates, learning about YAML frontmatter requirements, progressive disclosure patterns, tool restrictions (allowed-tools), skill composition, skill naming conventions, troubleshooting skill activation issues, creating custom slash commands, configuring command frontmatter, using command arguments ($ARGUMENTS, $1, $2), bash execution in commands, file references in commands, command namespacing, plugin commands, MCP slash commands, Skill tool configuration, or deciding between skills vs slash commands. Delegates to docs-management skill for official documentation.
reprompter
IncludedTransform messy prompts into well-structured, effective prompts — single or multi-agent. Use when: "reprompt", "reprompt this", "clean up this prompt", "structure my prompt", rough text needing XML tags and best practices, "reprompter teams", "repromptception", "run with quality", "smart run", "smart agents", multi-agent tasks, audits, parallel work, anything going to agent teams. Don't use when: simple Q&A, pure chat, immediate execution-only tasks. See "Don't Use When" section for details. Outputs: Structured XML/Markdown prompt, quality score (before/after), optional team brief + per-agent sub-prompts, agent team output files. Success criteria: Single mode quality score ≥ 7/10; Repromptception per-agent prompt quality score 8+/10; all required sections present, actionable and specific.
adaptive-compaction
IncludedAdaptive add-on policy and recovery layer that decides WHEN to compact, prune, snapshot, or fork -- replacing fixed-percent auto-compaction across Claude Code, Codex, and MCP-capable hosts. Trigger on auto-compact timing or damage: "when should I compact", "is it safe to compact now or start a fresh session", "auto-compact fires too early/mid-task", "switching to an unrelated task but the window still has space", "context rot", "answers get worse the longer the session runs", "the agent forgot the plan or my decisions after it summarized", "add a layer on top that manages context without changing the agent", raising autoCompactWindow to give the policy room, or installing/tuning a cross-tool compaction policy or PreCompact hook -- even when "compaction" is never said but the problem is context-window pressure or post-summarization memory loss. Do NOT use to summarize a conversation, build RAG, write a summarization prompt (decides WHEN not HOW), or answer max-context-length trivia.
agent-skill-creator
IncludedCreate cross-platform agent skills from workflow descriptions. Activates when users ask to create an agent, automate a repetitive workflow, create a custom skill, or need advanced agent creation. Triggers on phrases like create agent for, automate workflow, create skill for, every day I have to, daily I need to, turn process into agent, need to automate, create a cross-platform skill, validate this skill, export this skill, migrate this skill. Supports single skills, multi-agent suites, transcript processing, template-based creation, interactive configuration, cross-platform export, and spec validation.
llm-wiki
IncludedUse when building or maintaining a persistent personal knowledge base (second brain) in Obsidian where an LLM incrementally ingests sources, updates entity/concept pages, maintains cross-references, and keeps a synthesis current. Triggers include "second brain", "Obsidian wiki", "personal knowledge management", "ingest this paper/article/book", "build a research wiki", "compound knowledge", "Memex", or whenever the user wants knowledge to accumulate across sessions instead of being re-derived by RAG on every query.
skill-master
IncludedAgent Skills authoring, evaluation, and optimization. Create, edit, validate, benchmark, and improve skills following the agentskills.io specification. Use when designing SKILL.md files, structuring skill folders (references, scripts, assets), ingesting external documentation into skills, running trigger evals, benchmarking skill quality, optimizing descriptions, or performing blind A/B comparisons. Keywords: agentskills.io, SKILL.md, skill authoring, eval, benchmark, trigger optimization.