Web Analytics

mcp-on-rails

⭐ 142 stars French by pstrzalk

MCP on Rails (avec OAuth optionnel)

Un modèle d’application Rails qui intègre le Model Context Protocol (MCP) avec Ruby on Rails. Lors de la configuration, le modèle demande s’il faut ajouter une protection OAuth 2.1 avec Devise et Doorkeeper — ainsi un seul modèle supporte à la fois MCP simple et les configurations entièrement authentifiées.

Démarrage rapide

git clone https://github.com/pstrzalk/mcp-on-rails.git
rails new myapp -m mcp-on-rails/mcp
cd myapp
rails db:migrate
rails server
Le modèle invitera :

Add Devise + Doorkeeper OAuth 2.1 authentication? (y/n)
Répondez n pour un serveur MCP simple ou y pour une protection OAuth complète.

Ajout du modèle MCP à une application Rails existante

Vous pouvez tout aussi facilement appliquer ce modèle à une application Rails existante.

git clone https://github.com/pstrzalk/mcp-on-rails.git
cd your-project/
rails app:template LOCATION=../mcp-on-rails/mcp


MCP simple (répondre "n")

Crée une application Rails avec un serveur MCP ouvert — aucune authentification requise.

Ce que vous obtenez

Utilisation

rails new myapp -m mcp-on-rails/mcp   # answer n
cd myapp && rails db:migrate

rails generate scaffold Post title:string body:text rails db:migrate rails server

Testez-le :

# MCP initialize
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

List tools

curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Structure du projet (mode simple)

app/
├── controllers/
│   └── mcp_controller.rb              # Open MCP endpoint (no auth)
├── models/
│   └── application_record.rb          # Extended with to_mcp_response
├── prompts/                           # MCP prompts (created via generator)
└── tools/                             # MCP tools (auto-generated per scaffold)

config/ ├── initializers/ │ └── mcp.rb # MCP tool and prompt autoloading └── routes.rb # MCP routes

lib/ ├── generators/ # MCP tool and prompt generators └── tasks/ └── mcp.rake # rake mcp:tools, rake mcp:prompts (and verbose variants)

Connexion des assistants IA (mode simple)

{
  "name": "my-rails-app",
  "type": "StreamableHttp",
  "url": "http://localhost:3000/mcp"
}

Aucune authentification requise — le point de terminaison /mcp est ouvert.


OAuth MCP (répondez "y")

Crée une application Rails avec un serveur MCP protégé par OAuth 2.1, incluant PKCE, l'enregistrement dynamique des clients, et le support des indicateurs de ressources — tout ce qui est nécessaire pour le flux d'autorisation OAuth de MCP.

Ce que vous obtenez

Tout ce qui est inclus en mode simple, plus :

Utilisation

rails new myapp -m mcp-on-rails/mcp   # answer y
cd myapp && rails db:migrate

rails generate scaffold Post title:string body:text rails db:migrate rails server

Le point de terminaison /mcp nécessite désormais un jeton Bearer — les requêtes non authentifiées retournent 401.

Flux OAuth

Le flux complet d’autorisation suit la spécification OAuth de MCP :

RFC supportés

| RFC | Description | Point de terminaison | |-----|-------------|---------------------| | OAuth 2.1 + PKCE | Autorisation avec Proof Key for Code Exchange (S256) | /oauth/authorize, /oauth/token | | RFC 7591 | Enregistrement dynamique du client | POST /oauth/register | | RFC 8414 | Métadonnées du serveur d’autorisation | GET /.well-known/oauth-authorization-server | | RFC 8707 | Indicateurs de ressources | paramètre resource dans les requêtes d’auth et de jeton | | RFC 9728 | Métadonnées de ressource protégée | GET /.well-known/oauth-protected-resource |

Structure du projet (mode OAuth)

app/
├── controllers/
│   ├── mcp_controller.rb                              # OAuth-protected MCP endpoint
│   ├── oauth_client_registration_controller.rb        # RFC 7591
│   └── oauth_authorization_server_metadata_controller.rb  # RFC 8414 + 9728
├── models/
│   ├── user.rb                                        # Devise user with OAuth associations
│   ├── oauth_application.rb
│   ├── oauth_access_token.rb
│   └── oauth_access_grant.rb
├── prompts/                                           # MCP prompts (created via generator)
├── tools/                                             # MCP tools (auto-generated per scaffold)
└── views/
    └── devise/                                        # Customizable auth views

config/ ├── initializers/ │ ├── doorkeeper.rb # OAuth + PKCE config │ ├── devise.rb # User auth config │ └── mcp.rb # MCP tool autoloading └── routes.rb # All OAuth + MCP routes

db/migrate/ ├── *_devise_create_users.rb ├── *_create_doorkeeper_tables.rb ├── *_enable_pkce.rb └── *_add_resource_to_oauth_tables.rb

Connexion des assistants IA (mode OAuth)

{
  "name": "my-rails-app",
  "type": "StreamableHttp",
  "url": "http://localhost:3000/mcp"
}

Le client doit compléter le flux OAuth PKCE avant d'effectuer des requêtes MCP — le point de terminaison /mcp renvoie 401 sans un jeton Bearer valide.


Fonctionnalités communes (les deux modes)

Génération de modèles avec les outils MCP

rails generate scaffold Post title:string content:text
rails db:migrate

Cela crée des fichiers Rails standard plus 5 outils MCP dans app/tools/posts/ :

Création d’outils MCP personnalisés

rails generate mcp_tool WeatherCheck location:string

Création de invites MCP personnalisées

rails generate mcp_prompt hotel_finder location:required check_in_date:required adults price_max

Cela crée app/prompts/hotel_finder.rb avec une classe de prompt héritant de MCP::Prompt. Les arguments sont facultatifs par défaut — ajoutez :required pour les rendre obligatoires.

Les prompts sont automatiquement chargés depuis app/prompts/ et enregistrés auprès du serveur MCP. Contrairement aux outils, les prompts ne sont pas générés automatiquement lors du scaffolding — ils sont créés explicitement via le générateur.

Liste des outils et prompts disponibles

rake mcp:tools             # compact one-line-per-tool summary
rake mcp:tools:verbose     # full details with schema
rake mcp:prompts           # compact one-line-per-prompt summary
rake mcp:prompts:verbose   # full details with arguments

Licence

Licence MIT

--- Tranlated By Open Ai Tx | Last indexed: 2026-06-17 ---