ワンクリックで
mcp-server
Ruby MCP server development — tools, prompts, resources, transport, the mcp gem, LLM tool integrations.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Ruby MCP server development — tools, prompts, resources, transport, the mcp gem, LLM tool integrations.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Associations, validations, queries, migrations, eager loading, N+1 queries, scopes, callbacks, app/models/, db/migrate/.
2D game development — game loops, sprites, input, collisions, scenes, DRGTK, args.outputs/state/inputs.
Decorator patterns for Rails views — presentation logic separated from models, *_decorator.rb, app/decorators/.
Terminal UI development — widgets, layouts, events, Tea MVU, terminal rendering.
Testing with FactoryBot — matchers, test doubles, shared examples, describe/it/expect blocks, *_spec.rb files, test strategy.
| name | mcp-server |
| description | Ruby MCP server development — tools, prompts, resources, transport, the mcp gem, LLM tool integrations. |
Build Model Context Protocol servers in Ruby using the official mcp gem (maintained by Anthropic and Shopify).
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
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:
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.
Too many tools overwhelm agents and increase costs. Design toolsets around clear use cases, not API endpoint mirrors.
Three capabilities that, when combined, create vulnerabilities (Simon Willison):
Required: Explicit user consent before tool invocation, clear UI showing exposed tools, alerts when tool descriptions change.
| Component | Purpose | Reference |
|---|---|---|
| Tools | Define callable functions with input/output schemas | references/tools.md |
| Prompts | Template-based message generators | references/prompts.md |
| Resources | Static and dynamic file/data registration | references/resources.md |
| Server | Core server initialization and configuration | references/server.md |
| Transport | STDIO and HTTP transport options | references/transport.md |
| Gotchas | Tricky behaviors and error handling | references/gotchas.md |
| 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 |
| 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 |
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)
| 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 |
| Feature | Minimum Version |
|---|---|
description | 2025-11-25 |
instructions | 2025-03-26 |
annotations | 2025-03-26 |
output_schema | 2025-03-26 |
tool_name for namespaced classes to avoid conflictsadditionalProperties: false for strict schema validationResponse.new([...], error: true))server_context for request-scoped data (user_id, env)$ref in schemas (raises ArgumentError, inline only)additionalProperties defaults to allowing extras)rpc. prefix (reserved for protocol methods)| 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 |
server_context: parameter)For detailed DSL syntax by domain:
references/tools.md - Tool definition, responses, schemas, annotationsreferences/prompts.md - Prompt definition, arguments, content typesreferences/resources.md - Resource registration, templates, read handlersreferences/server.md - Server initialization, configuration, custom methodsreferences/transport.md - Transport config, protocol methods, sessionsreferences/gotchas.md - Tricky behaviors, error handling, edge casesWorking examples in examples/:
examples/stdio_server.rb - Complete STDIO server with tools, prompts, resourcesexamples/http_server.rb - HTTP server with Rack and loggingexamples/rails_integration.rb - Rails controller, routes, and initializerexamples/file_manager_tool.rb - Sandboxed file operations with security patternsexamples/dynamic_tools.rb - Runtime tool registration with notificationsexamples/http_client.rb - HTTP client connecting to MCP serverexamples/streaming_client.rb - SSE streaming client for real-time notifications