https://github.com/opgginc/laravel-mcp-server
A Laravel package for implementing secure Model Context Protocol servers using Server-Sent Events (SSE) transport, providing real-time communication and a scalable tool system for enterprise environments.
https://github.com/opgginc/laravel-mcp-server
ai laravel laravel-package llm mcp php sse
Last synced: 6 months ago
JSON representation
A Laravel package for implementing secure Model Context Protocol servers using Server-Sent Events (SSE) transport, providing real-time communication and a scalable tool system for enterprise environments.
- Host: GitHub
- URL: https://github.com/opgginc/laravel-mcp-server
- Owner: opgginc
- License: mit
- Created: 2025-04-13T18:04:48.000Z (7 months ago)
- Default Branch: master
- Last Pushed: 2025-04-18T02:04:59.000Z (7 months ago)
- Last Synced: 2025-04-18T08:34:29.880Z (7 months ago)
- Topics: ai, laravel, laravel-package, llm, mcp, php, sse
- Language: PHP
- Homepage: https://op.gg/open-source/laravel-mcp-server
- Size: 138 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ko.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-mcp-servers - **laravel-mcp-server** - A Laravel package for implementing secure Model Context Protocol servers using Streamable HTTP and SSE transport, providing real-time communication and a scalable tool system for enterprise environments. `php` `ai` `laravel` `laravel-package` `llm` `git clone https://github.com/opgginc/laravel-mcp-server` (๐ค AI/ML)
- awesome-mcp-servers - **laravel-mcp-server** - A Laravel package for implementing secure Model Context Protocol servers using Streamable HTTP and SSE transport, providing real-time communication and a scalable tool system for enterprise environments. `php` `ai` `laravel` `laravel-package` `llm` `git clone https://github.com/opgginc/laravel-mcp-server` (AI/ML)
- awesome-ai - opgginc/laravel-mcp-server - time communication and a scalable tool system for enterprise environments. โ`325` (Backend / Laravel)
- awesome-ai - opgginc/laravel-mcp-server - time communication and a scalable tool system for enterprise environments. โ`251` (Backend / Laravel)
README
Laravel MCP ์๋ฒ by OP.GG
Model Context Protocol ์๋ฒ๋ฅผ ์ฌ์ด ๊ตฌ์ถ์ ์ํ ๊ฐ๋ ฅํ ๋ผ๋ผ๋ฒจ ํจํค์ง
English |
Portuguรชs do Brasil |
ํ๊ตญ์ด |
ะ ัััะบะธะน |
็ฎไฝไธญๆ |
็น้ซไธญๆ |
Polski
## ๊ฐ์
Laravel MCP Server๋ ๋ผ๋ผ๋ฒจ ์ฑ์์ Model Context Protocol(MCP) ์๋ฒ๋ฅผ ์ฌ์ด ๊ตฌํ์ ์ํด ์ค๊ณ๋ ๊ฐ๋ ฅํ ํจํค์ง์
๋๋ค. **๋๋ถ๋ถ์ ๋ผ๋ผ๋ฒจ MCP ํจํค์ง๊ฐ ํ์ค ์
์ถ๋ ฅ(stdio)์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ**, ์ด ํจํค์ง๋ **์๋ฒ ์ผํธ ์ด๋ฒคํธ(SSE)๋ฅผ ํ์ฉ**ํด ๋ ์์ ํ๊ณ ์ก๊ธฐ ์ข์ ํตํฉ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
### ์ STDIO ๋์ SSE์ธ๊ฐ?
stdio๋ ๊ฐ๋จํ๊ณ MCP ๊ตฌํ์ ๋๋ฆฌ ์ฐ์ด์ง๋ง, ๊ธฐ์
ํ๊ฒฝ์์๋ ์ค์ํ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค:
- **๋ณด์ ์ํ**: STDIO ์ ์ก์ ์์คํ
๋ด๋ถ ์ ๋ณด์ API ๋ช
์ธ๋ฅผ ๋
ธ์ถ์ํฌ ๊ฐ๋ฅ์ฑ์ด ์์
- **๋ฐ์ดํฐ ๋ณดํธ**: ๊ธฐ์
์ ๋
์ API ์๋ํฌ์ธํธ์ ๋ด๋ถ ์์คํ
์ํคํ
์ฒ๋ฅผ ๋ณดํธํด์ผ ํจ
- **์ ์ด์ฑ**: SSE๋ LLM ํด๋ผ์ด์ธํธ์ ์ฑ ๊ฐ ํต์ ์ฑ๋์ ๋ ์ ์ ์ดํ ์ ์์
SSE ์ ์ก์ ํตํด MCP ์๋ฒ๋ฅผ ๊ตฌํํ๋ฉด ๊ธฐ์
์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
- ๋
์ API ์ธ๋ถ ์ ๋ณด๋ฅผ ๋น๊ณต๊ฐ๋ก ์ ์งํ๋ฉด์ ํ์ํ ๋๊ตฌ์ ๋ฆฌ์์ค๋ง ๋
ธ์ถ
- ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ํ๋ก์ธ์ค์ ๋ํ ์ ์ด ์ ์ง
์ฃผ์ ์ด์ :
- ๊ธฐ์กด ๋ผ๋ผ๋ฒจ ํ๋ก์ ํธ์ SSE๋ฅผ ๋น ๋ฅด๊ณ ์ฌ์ด ๊ตฌํ ๊ฐ๋ฅ
- ์ต์ ๋ผ๋ผ๋ฒจ๊ณผ PHP ๋ฒ์ ์ง์
- ํจ์จ์ ์ธ ์๋ฒ ํต์ ๊ณผ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๊ธฐ์
ํ๊ฒฝ์ ์ํ ๊ฐํ๋ ๋ณด์
## ์ฃผ์ ๊ธฐ๋ฅ
- ์๋ฒ ์ผํธ ์ด๋ฒคํธ(SSE) ํตํฉ์ ํตํ ์ค์๊ฐ ํต์ ์ง์
- Model Context Protocol ๋ช
์ธ๋ฅผ ์ค์ํ๋ ๋๊ตฌ ๋ฐ ๋ฆฌ์์ค ๊ตฌํ
- Pub/Sub ๋ฉ์์ง ํจํด์ด ์ ์ฉ๋ ์ด๋ํฐ ๊ธฐ๋ฐ ์ค๊ณ ์ํคํ
์ฒ(Redis๋ก ์์, ์ถ๊ฐ ์ด๋ํฐ ๊ณํ ์ค)
- ๊ฐ๋จํ ๋ผ์ฐํ
๋ฐ ๋ฏธ๋ค์จ์ด ์ค์
## ์๊ตฌ ์ฌํญ
- PHP >=8.2
- Laravel >=10.x
## ์ค์น
1. Composer๋ฅผ ํตํด ํจํค์ง ์ค์น:
```bash
composer require opgginc/laravel-mcp-server
```
2. ์ค์ ํ์ผ ํผ๋ธ๋ฆฌ์ฑ:
```bash
php artisan vendor:publish --provider="OPGG\LaravelMcpServer\LaravelMcpServerServiceProvider"
```
## ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
### ์ปค์คํ
๋๊ตฌ ์์ฑ ๋ฐ ์ถ๊ฐ
์ด ํจํค์ง๋ ์๋ก์ด ๋๊ตฌ๋ฅผ ์์ฑํ๊ธฐ ์ํ ํธ๋ฆฌํ ์ํฐ์ฆ ๋ช
๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค:
```bash
php artisan make:mcp-tool MyCustomTool
```
์ด ๋ช
๋ น์ด๋:
- ๋ค์ํ ์
๋ ฅ ํฌ๋งท(๊ณต๋ฐฑ, ํ์ดํ, ํผํฉ ์ผ์ด์ค) ์ฒ๋ฆฌ
- ์ด๋ฆ์ ์ ์ ํ ์ผ์ด์ค ํฌ๋งท์ผ๋ก ์๋ ๋ณํ
- `app/MCP/Tools`์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์กฐํ๋ ๋๊ตฌ ํด๋์ค ์์ฑ
- ์ค์ ์ ๋๊ตฌ๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ ์ ์๋ ์ต์
์ ๊ณต
`config/mcp-server.php`์ ์๋์ผ๋ก ๋๊ตฌ๋ฅผ ์์ฑํ๊ณ ๋ฑ๋กํ ์๋ ์์ต๋๋ค:
```php
use OPGG\LaravelMcpServer\Services\ToolService\ToolInterface;
class MyCustomTool implements ToolInterface
{
// ๋๊ตฌ ๊ตฌํ
}
```
### MCP ๋๊ตฌ ํ
์คํธ
์ด ํจํค์ง๋ ์ค์ MCP ํด๋ผ์ด์ธํธ ์์ด๋ MCP ๋๊ตฌ๋ฅผ ํ
์คํธํ ์ ์๋ ํน๋ณํ ๋ช
๋ น์ด๋ฅผ ํฌํจํฉ๋๋ค:
```bash
# ํน์ ๋๊ตฌ๋ฅผ ๋ํํ์ผ๋ก ํ
์คํธ
php artisan mcp:test-tool MyCustomTool
# ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋๊ตฌ ๋์ด
php artisan mcp:test-tool --list
# ํน์ JSON ์
๋ ฅ์ผ๋ก ํ
์คํธ
php artisan mcp:test-tool MyCustomTool --input='{"param":"๊ฐ"}'
```
์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋๊ตฌ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ ๋๋ฒ๊น
ํ ์ ์์ต๋๋ค:
- ๋๊ตฌ์ ์
๋ ฅ ์คํค๋ง ํ์ ๋ฐ ์
๋ ฅ ๊ฒ์ฆ
- ์ ๊ณตํ ์
๋ ฅ์ผ๋ก ๋๊ตฌ ์คํ
- ํฌ๋งท๋ ๊ฒฐ๊ณผ ๋๋ ์์ธ ์ค๋ฅ ์ ๋ณด ํ์
- ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด์ ํฌํจํ ๋ณต์กํ ์
๋ ฅ ํ์
์ง์
### MCP ์ธ์คํํฐ๋ก ๋๊ตฌ ์๊ฐํํ๊ธฐ
Model Context Protocol ์ธ์คํํฐ๋ฅผ ์ฌ์ฉํ์ฌ MCP ๋๊ตฌ๋ฅผ ์๊ฐํํ๊ณ ํ
์คํธํ ์๋ ์์ต๋๋ค:
```bash
# ๋ณ๋ ์ค์น ์์ด MCP ์ธ์คํํฐ ๋ฐ๋ก ์คํ
npx @modelcontextprotocol/inspector node build/index.js
```
์ด ๋ช
๋ น์ด๋ ๋ณดํต `localhost:6274`์ ์น ์ธํฐํ์ด์ค๋ฅผ ๋์์ค๋๋ค. MCP ์๋ฒ ํ
์คํธ ๋ฐฉ๋ฒ:
1. **์ฃผ์์ฌํญ**: `php artisan serve`๋ ์ฌ๋ฌ ๊ฐ์ PHP ์ปค๋ฅ์
์ ๋์์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ํจํค์ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. MCP SSE๋ ์ฌ๋ฌ ์ปค๋ฅ์
์ ๋์์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ๋ค์ ๋์ ์ค ํ๋๋ฅผ ๋ฐ๋์ ์ฌ์ฉํด์ผ ํฉ๋๋ค:
* **Laravel Octane** (๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ):
```bash
# FrankenPHP๋ฅผ ์ฌ์ฉํ์ฌ Laravel Octane ์ค์น ๋ฐ ์ค์ (๊ถ์ฅ)
composer require laravel/octane
php artisan octane:install --server=frankenphp
# Octane ์๋ฒ ์์
php artisan octane:start
```
> **์ค์**: Laravel Octane์ ์ค์นํ ๋ FrankenPHP๋ฅผ ์๋ฒ๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค. RoadRunner๋ฅผ ์ฌ์ฉํ๋ฉด SSE ์ฐ๊ฒฐ ํธํ์ฑ ๋ฌธ์ ๋ก ํจํค์ง๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค. RoadRunner ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ถ์ Pull Request๋ฅผ ์ ์ถํด ์ฃผ์๋ฉด ๋๋จํ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
์์ธํ ๋ด์ฉ์ [Laravel Octane ๋ฌธ์](https://laravel.com/docs/12.x/octane)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
* **ํ๋ก๋์
๊ธ ์ต์
**:
- Nginx + PHP-FPM
- Apache + PHP-FPM
- ์ปค์คํ
Docker ์ค์
- SSE ์คํธ๋ฆฌ๋ฐ์ ์ ๋๋ก ์ง์ํ๋ ๋ชจ๋ ์น ์๋ฒ
2. ์ธ์คํํฐ ์ธํฐํ์ด์ค์์ Laravel ์๋ฒ์ MCP SSE URL์ ์
๋ ฅํฉ๋๋ค(์: `http://localhost:8000/mcp/sse`)
3. ์ฐ๊ฒฐํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํฉ๋๋ค
SSE URL์ `http://[๋ผ๋ผ๋ฒจ์๋ฒ์ฃผ์]/[default_path]/sse` ํํ๋ก, ์ฌ๊ธฐ์ `default_path`๋ `config/mcp-server.php`์ ์ ์๋์ด ์์ต๋๋ค.
## ๊ณ ๊ธ ๊ธฐ๋ฅ
### SSE ์ด๋ํฐ๊ฐ ์ ์ฉ๋ Pub/Sub ์ํคํ
์ฒ
์ด ํจํค์ง๋ ์ด๋ํฐ ์์คํ
์ ํตํด ๊ฒ์/๊ตฌ๋
(pub/sub) ๋ฉ์์ง ํจํด์ ๊ตฌํํฉ๋๋ค:
1. **๊ฒ์์(์๋ฒ)**: ํด๋ผ์ด์ธํธ๊ฐ `/message` ์๋ํฌ์ธํธ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ์ด ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ตฌ์ฑ๋ ์ด๋ํฐ๋ฅผ ํตํด ์๋ต์ ๊ฒ์ํฉ๋๋ค.
2. **๋ฉ์์ง ๋ธ๋ก์ปค(์ด๋ํฐ)**: ์ด๋ํฐ(์: Redis)๋ ๊ณ ์ ํ ํด๋ผ์ด์ธํธ ID๋ก ์๋ณ๋๋ ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ฉ์์ง ํ๋ฅผ ์ ์งํฉ๋๋ค. ์ด๋ ์ ๋ขฐํ ์ ์๋ ๋น๋๊ธฐ ํต์ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค.
3. **๊ตฌ๋
์(SSE ์ฐ๊ฒฐ)**: ์ฅ๊ธฐ ์ง์ SSE ์ฐ๊ฒฐ์ ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ํ ๋ฉ์์ง๋ฅผ ๊ตฌ๋
ํ๊ณ ์ค์๊ฐ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์ด ์ํคํ
์ฒ๋ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค:
- ํ์ฅ ๊ฐ๋ฅํ ์ค์๊ฐ ํต์
- ์ผ์์ ์ธ ์ฐ๊ฒฐ ๋๊น ์ํฉ์์๋ ์์ ์ ์ธ ๋ฉ์์ง ์ ๋ฌ
- ๋ค์ค ๋์ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ
- ๋ถ์ฐ ์๋ฒ ๋ฐฐํฌ ๊ฐ๋ฅ์ฑ
### Redis ์ด๋ํฐ ์ค์
๊ธฐ๋ณธ Redis ์ด๋ํฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
```php
'sse_adapter' => 'redis',
'adapters' => [
'redis' => [
'prefix' => 'mcp_sse_', // Redis ํค ์ ๋์ฌ
'connection' => 'default', // database.php์ ์ ์๋ Redis ์ฐ๊ฒฐ
'ttl' => 100, // ๋ฉ์์ง TTL(์ด)
],
],
```
## ํ๊ฒฝ ๋ณ์
์ด ํจํค์ง๋ ์ค์ ํ์ผ์ ์์ ํ์ง ์๊ณ ๋ ๊ตฌ์ฑํ ์ ์๋๋ก ๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ํฉ๋๋ค:
| ๋ณ์ | ์ค๋ช
| ๊ธฐ๋ณธ๊ฐ |
|----------|-------------|--------|
| `MCP_SERVER_ENABLED` | MCP ์๋ฒ ํ์ฑํ ๋๋ ๋นํ์ฑํ | `true` |
| `MCP_REDIS_CONNECTION` | database.php์ Redis ์ฐ๊ฒฐ ์ด๋ฆ | `default` |
### .env ์ค์ ์์
```
# ํน์ ํ๊ฒฝ์์ MCP ์๋ฒ ๋นํ์ฑํ
MCP_SERVER_ENABLED=false
# MCP์ฉ ํน์ Redis ์ฐ๊ฒฐ ์ฌ์ฉ
MCP_REDIS_CONNECTION=mcp
```
## ๋ผ์ด์ผ์ค
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ผ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค.