Curated library of 42 public AI agent skills for Ruby on Rails development, plus 5 callable workflow skills. Organized by category: planning, testing, code-quality, ddd, engines, infrastructure, api, patterns, context, orchestration, and workflows. Covers code review, architecture, security, testing (RSpec), engines, service objects, DDD patterns, and TDD automation.
96
96%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Risky
Do not use without reviewing
A Ruby MCP server that exposes the rails-agent-skills skill library to AI tools (Windsurf, Cursor, Claude Code, RubyMine, etc.) via the Model Context Protocol official spec (JSON-RPC 2.0, stdio transport).
Built on the official Ruby MCP SDK (gem 'mcp').
| Requirement | Version |
|---|---|
| Ruby | 4.0+ |
mcp gem | 0.15+ |
| Bundler | 2.x |
| Type | Prefix / Name | Source |
|---|---|---|
| Resources | doc/<name> | All *.md files under docs/, including nested docs such as docs/workflows/*.md |
| Resources | workflow/<name> | Every workflow directory under workflows/<workflow>/, exposed from its SKILL.md plus supported companion files |
| Tool | use_skill | Invocable tool: given a skill_name, returns the full SKILL.md content |
Individual Skills are no longer exposed as resources to prevent context bloat. They are accessed exclusively via the use_skill tool.
Adding a new skill directory to the repo automatically makes it available through use_skill — no server changes needed.
The runtime code lives in mcp_server/, while the container build lives at ../Dockerfile because the image needs the full repository checkout, including skills, workflows, and docs.
mcp_server/
├── server.rb # Entry point: MCP::Server + StdioTransport
├── Gemfile # gem 'mcp' (official SDK), minitest, rake
├── Rakefile # bundle exec rake test
├── registry.json # Metadata for MCP registries (smithery.ai, glama.ai)
├── lib/
│ └── mcp_skills/
│ ├── resource_registry.rb # Service: discovers published docs and workflows
│ ├── resource_discovery.rb # Service: resolves published skill/workflow topology
│ ├── skill_resource_builder.rb # Service: builds MCP::Resource objects for workflow markdown
│ ├── doc_resource_builder.rb # Service: builds MCP::Resource objects for docs
│ └── skill_tool.rb # MCP::Tool: 'use_skill' invocable by the agent
└── test/
├── test_helper.rb
├── resource_registry_test.rb
├── skill_resource_builder_test.rb
├── doc_resource_builder_test.rb
└── skill_tool_test.rbService objects:
McpSkills::ResourceRegistry — scans the repo for published docs and workflows. Single source of truth for the resource set.McpSkills::ResourceDiscovery — resolves the published topology for root build/, nested skills/, root workflows/, and docs/.McpSkills::SkillResourceBuilder — maps a workflow directory path to MCP::Resource objects with file:// URIs and a configurable name prefix.McpSkills::DocResourceBuilder — builds doc/ resources for markdown files anywhere under docs/.McpSkills::SkillTool — MCP::Tool subclass. call(skill_name:) reads and returns the SKILL.md content.git clone https://github.com/igmarin/rails-agent-skills.git ~/rails-agent-skills
cd ~/rails-agent-skills/mcp_server
bundle installRun the server manually (stdio — for debugging):
bundle exec ruby server.rbInspect with the MCP inspector:
npx @modelcontextprotocol/inspector bundle exec ruby server.rbThe repo includes a pre-populated .mcp.json at the root. When you open the cloned repo as a project in Claude Code, the server is registered automatically — no manual config needed.
For global setup (available in every project), add to ~/.claude/mcp.json:
Note: Always use absolute paths to avoid "Gems not found" or timeout errors.
{
"mcpServers": {
"rails-agent-skills": {
"type": "stdio",
"command": "bundle",
"args": ["exec", "ruby", "mcp_server/server.rb"],
"cwd": "/ABSOLUTE/PATH/TO/rails-agent-skills",
"env": {
"BUNDLE_GEMFILE": "/ABSOLUTE/PATH/TO/rails-agent-skills/mcp_server/Gemfile"
}
}
}
}The config goes in your global Windsurf MCP file (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"rails-agent-skills": {
"type": "stdio",
"command": "bundle",
"args": ["exec", "ruby", "mcp_server/server.rb"],
"cwd": "/ABSOLUTE/PATH/TO/rails-agent-skills",
"env": {
"BUNDLE_GEMFILE": "/ABSOLUTE/PATH/TO/rails-agent-skills/mcp_server/Gemfile"
}
}
}
}Open Settings → MCP (or edit ~/.cursor/mcp.json) and add:
{
"mcpServers": {
"rails-agent-skills": {
"type": "stdio",
"command": "bundle",
"args": ["exec", "ruby", "mcp_server/server.rb"],
"cwd": "/ABSOLUTE/PATH/TO/rails-agent-skills",
"env": {
"BUNDLE_GEMFILE": "/ABSOLUTE/PATH/TO/rails-agent-skills/mcp_server/Gemfile"
}
}
}
}If you encounter errors like Could not find 'mcp' (>= 0) or the server times out:
cwd and BUNDLE_GEMFILE in your JSON config use absolute paths (e.g., /Users/name/... instead of ~/...).cd mcp_server && bundle install manually in your terminal to ensure the environment is ready.BUNDLE_GEMFILE=/ABSOLUTE/PATH/TO/rails-agent-skills/mcp_server/Gemfile bundle exec ruby /ABSOLUTE/PATH/TO/rails-agent-skills/mcp_server/server.rbcommand in your config points to the correct bundle executable if bundle alone doesn't work.Open Settings → Tools → AI Assistant → Model Context Protocol and add a new server:
bundle exec ruby mcp_server/server.rb/YOUR/PATH/TO/rails-agent-skillsBUNDLE_GEMFILE=/YOUR/PATH/TO/rails-agent-skills/mcp_server/GemfileRestart RubyMine.
For any other tool that supports the Model Context Protocol via stdio, use the following template. Crucial: Most external providers fail if you use relative paths or ~, so always use absolute paths.
{
"mcpServers": {
"rails-agent-skills": {
"type": "stdio",
"command": "bundle",
"args": ["exec", "ruby", "mcp_server/server.rb"],
"cwd": "/ABSOLUTE/PATH/TO/rails-agent-skills",
"env": {
"BUNDLE_GEMFILE": "/ABSOLUTE/PATH/TO/rails-agent-skills/mcp_server/Gemfile"
}
}
}
}For environments without Ruby, or for containerized deployment, Docker remains the fallback path. The primary setup for this repo is still local Ruby/Bundler.
# From the root of the repository:
docker build -t rails-agent-skills-mcp .
docker run --rm -i rails-agent-skills-mcpThe container uses stdio transport — wire it up the same way as the Ruby command, replacing bundle exec ruby server.rb with docker run --rm -i rails-agent-skills-mcp.
Docker Hub (published image):
{
"mcpServers": {
"rails-agent-skills": {
"type": "stdio",
"command": "docker",
"args": ["run", "--rm", "-i", "igmarin/rails-agent-skills-mcp"]
}
}
}tools/call use_skill with skill_name: "implement-graphql".implement-graphql/SKILL.md and returns the full instructions.bundle exec rake testTests are written with Minitest: each file validates real behavior of a service object, not just structure.
ResourceRegistry uses explicit topology discovery for build/SKILL.md, skills/*/*/SKILL.md, workflows/*/SKILL.md, supported Tessl tile mirrors, and docs/**/*.md. When you add a published workflow or doc file in those locations, it appears in resources/list on the next server start. Published skills become available through use_skill without any server code changes.
This server is listed on:
lib/mcp_skills/ and must be independently testable (no MCP::Server dependency in unit tests).mcp gem — do not reimplement wire format in service objects.build
docs
mcp_server
skills
api
generate-api-collection
implement-graphql
code-quality
apply-code-conventions
apply-stack-conventions
assets
snippets
code-review
refactor-code
respond-to-review
review-architecture
security-check
context
load-context
setup-environment
ddd
define-domain-language
model-domain
review-domain-boundaries
engines
create-engine
create-engine-installer
document-engine
extract-engine
release-engine
review-engine
test-engine
upgrade-engine
infrastructure
implement-background-job
implement-hotwire
optimize-performance
review-migration
seed-database
version-api
orchestration
skill-router
patterns
create-service-object
implement-calculator-pattern
write-yard-docs
planning
create-prd
generate-tasks
plan-tickets
testing
plan-tests
test-service
triage-bug
write-tests
workflows