Skip to main content
Glama
10xroadmap

Order Status Server

by 10xroadmap
README.md
# Laravel MCP Server

### Youtube Video
[Build MCP Server with Laravel](https://www.youtube.com/watch?v=9yFzD-1JoQE)

## Why Choose a Laravel-Based MCP Server?
- If your application is built on `Laravel`, developing a `MCP Server` directly within your existing codebase is often more efficient and secure than maintaining a separate Python microservice. 
- By using Laravel as your MCP host, you create a seamless translation layer that exposes your data, business logic, and internal functions directly to AI agents like Antigravity or Claude Code

---
### Key Advantages

* **Native Access to Business Logic:** Skip the overhead of building and securing custom REST APIs. Your AI tools can interact directly with your database, Eloquent models, relationships, and internal services using code you already have.
* **Enterprise-Grade Security:** Leverage Laravel’s mature security ecosystem. You can utilize built-in features like Laravel Sanctum for authentication and standard middleware for rate-limiting, ensuring your AI integrations are protected by the same rigorous standards as your web app.
* **Robust, Familiar Architecture:** Benefit from built-in Artisan scaffolding to generate tools quickly, keep AI-specific logic organized in a dedicated `app/Mcp` directory, and offload resource-intensive tasks to your existing Laravel Queue infrastructure for better performance.

## Requirements
- PHP: 8.3 or Higher
- Laravel: 13.8 or Higher
- MySql: 9.3.0 or Higher

## How to run
1. Clone this repository
```
git clone 
```
2. Create `.env` file
```
copy .env.example .env
```

3. Update `.env` file with MySQL connection settings
```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mcp-db
DB_USERNAME=root
DB_PASSWORD='Password' 
```
4. Generate encryption key for App
```
php artisan key generate
```
5. run migration
```
php artisan migrate
```
6. run db-seed
```
php artisan db:seed
```
7. run the app
```
php artisan server
```
## Design
1. Database Model

| Model | App\Models\OrderStatus | 
| :--- | :---: | 
| Table | order_status | 
| Fields | order_id(integer),product,status | 

2. Database seed
- Database\Seeders\OrderStatusSeeder
- contains some entries for order status

| order_id | product | status \
| :--- | :---: | :---: | 
| 1 | Noodles | PENDING |
| 2 | Sauce | PROCESSING|

3. MCP Tool
- App\Mcp\Tools\OrderStatusFinderTool
- name : `order-status-finder`
- what it do : Find and return status of order in structured format

4. MCP Server
- App\Mcp\Servers\OrderStatusServer
- name : `Order Status Server`
- contains : One tool (OrderStatusFinderTool), no resources, no prompts

## How to test
- make sure MCP Server is running
- execute `php artisan serve` at terminal to run MCP Server

### Via Postman
1. File -> New -> MCP
2. Request Type : Change from STDIO to HTTP
3. URL : http://127.0.0.1:8000/mcp/order-status
3. Press Connect
4. Now Click Tools::Order Status Finder Tool
5. Enter Order Id as `1` or `2` and Press run
6. Click response at Bottom to View Output

### Via Antigravity CLI
1. Config
Open  ~/.gemini/config/mcp_config.json

Add:
```json
{
    "mcpServers": {
        "order-status": {
            "serverUrl": "http://127.0.0.1:8000/mcp/order-status/",
            "headers": {
                "Accept": "application/json, text/event-stream",
                "Content-Type": "application/json"
            }
        }
    }
}
```
2. Launch Antigravity CLI
```
agy
```

Prompt: `What is the status of order id 2`

## Via ADK 2.0 Agent
```
# mcp_client.py
from google.adk.agents import LlmAgent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams


# Configure connection parameters for the remote HTTP server
connection_params = StreamableHTTPConnectionParams(
    url="http://127.0.0.1:8000/mcp/order-status",
    headers={
        "Accept": "application/json, text/event-stream",
        "Content-Type":"application/json"
    
    } 
)

# Instantiate the toolset
mcp_tools = McpToolset(connection_params=connection_params)

root_agent = LlmAgent(
    model="gemini-2.5-flash-lite",
    name="order_status_agent",
    instruction="""
    You are a helpful assistant who has insight about github accounts
    """,
    tools=[mcp_tools],
)
```
Prompt: `What is the status of order id 2`

## Laravel MCP Documentation
Visit: https://laravel.com/docs/13.x/mcp 

## GIT REPO URL
https://github.com/10xroadmap/laravel-mcp-server-tool-demo

## License or Terms of Use
This project is open-source. However, no part of the source code may be republished, modified, or distributed for commercial or public purposes without giving appropriate credit to the original author.