API合同生成工具

一个Laravel包,用于通过MCP(模型上下文协议)集成生成和管理API合同。

  • by abr4xas
  • PHP
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 abr4xas/mcp-tools

使用说明

MCP工具

一个Laravel包,用于生成和管理与MCP(模型上下文协议)集成的API合同。

[!重要] 此软件包提供必须在项目的MCP服务器中注册的MCP工具。它本身不会创建或运行MCP服务器——您需要 Laravel MCP 在您的项目中配置。

特性

  • 自动生成API合同:从您的Laravel路线生成全面的API合同
  • MCP工具集成:通过MCP工具列出并描述API路线
  • 高级分析:对路由、FormRequests、资源和中间件进行深入分析
  • OpenAPI导出:将合约导出为OpenAPI 3.0格式
  • 缓存:智能缓存可提高性能
  • 验证:对生成的合约进行JSON模式验证

需求

安装

通过composer安装软件包:

composer require abr4xas/mcp-tools

该包将自动注册其服务提供商。但是,必须在项目的MCP服务器配置中手动注册MCP工具。

用法

生成API合同

从您的Laravel路线生成全面的API合同:

php artisan api:contract:generate

此命令将:

  • 扫描所有申请路线
  • 提取路线信息(方法、路径、参数)
  • 分析控制器方法和FormRequest类
  • 生成身份验证要求
  • 在以下位置创建JSON文件 storage/api-contracts/api.json

选项:

  • --incremental:仅更新已修改的路线
  • --log:启用详细日志记录
  • --dry-run:验证而不写入文件
  • --validate-schemas:根据JSON模式验证生成的模式

导出到OpenAPI

php artisan api:export-openapi

清除缓存

php artisan mcp-tools:clear-cache

健康检查

php artisan mcp-tools:health-check

查看指标

php artisan mcp-tools:metrics

管理合同版本

php artisan api:contract:versions

查看日志

php artisan mcp-tools:logs

MCP工具

该软件包提供了MCP工具,必须在Laravel MCP服务器配置中手动注册。

[!重要] 验证注册 通过检查MCP服务器的可用工具列表。

1. list-api-routes

列出所有带有可选筛选的API路由。

论据:

  • method (可选):按HTTP方法过滤(GET、POST、PUT、DELETE、PATCH)
  • version (可选):按API版本筛选(v1、v2等)
  • search (可选):按路径筛选路线的搜索词
  • limit (可选):最大结果数(默认值:50,最大值:200)
  • page (可选):分页页码(默认值:1)

例子:

{
    "method": "GET",
    "version": "v1",
    "search": "users",
    "limit": 10,
    "page": 1
}

2. describe-api-route

获取特定端点的详细信息。

论据:

  • path (必需):API路由路径(例如。, /api/v1/users/{user})
  • method (可选):HTTP方法(默认为GET)

例子:

{
    "path": "/api/v1/users/{user}",
    "method": "GET"
}

答复包括:

  • 路线描述
  • API版本
  • 身份验证要求
  • 带类型的路径参数
  • 请求/响应模式(如果可用)
  • 速率限制信息
  • 状态代码
  • 内容协商

注册MCP工具

此包提供的MCP工具必须在Laravel MCP服务器配置中手动注册。

故障排除

如果您在注册工具时遇到问题:

  • 工具未出现:确保正确加载MCP服务器配置文件
  • 未找到类错误:运行 composer dump-autoload 刷新自动加载器
  • 服务提供商未注册:检查一下 Abr4xas\McpTools\McpToolsServiceProvider 在你的 config/app.php 提供者数组(应自动发现)

配置

该包会自动检测并包含在合同中:

  • 路线参数和类型
  • 身份验证要求(来源于中间件分析)
  • 速率限制信息
  • 请求验证规则(来自FormRequests)
  • 响应模式(来自参考资料)
  • 状态代码
  • 自定义标头
  • 内容协商
  • API版本控制

API合同结构

生成的合同位于 storage/api-contracts/api.json 遵循此结构:

{
    "/api/v1/users": {
        "GET": {
            "description": "List all users",
            "deprecated": null,
            "auth": { "type": "bearer" },
            "path_parameters": {},
            "request_schema": {
                "location": "query",
                "properties": {}
            },
            "response_schema": {
                "type": "array",
                "items": {}
            },
            "response_headers": [],
            "custom_headers": [],
            "rate_limit": null,
            "api_version": "v1",
            "status_codes": {
                "200": "OK",
                "401": "Unauthorized"
            },
            "content_negotiation": []
        },
        "POST": {
            "description": "Create a new user",
            "deprecated": null,
            "auth": { "type": "bearer" },
            "path_parameters": {},
            "request_schema": {
                "location": "body",
                "properties": {
                    "name": { "type": "string", "required": true },
                    "email": { "type": "string", "format": "email", "required": true }
                }
            },
            "response_schema": { "type": "object", "properties": {} },
            "response_headers": [],
            "custom_headers": [],
            "rate_limit": null,
            "api_version": "v1",
            "status_codes": {
                "201": "Created",
                "422": "Unprocessable Entity"
            },
            "content_negotiation": []
        }
    },
    "/api/v1/users/{user}": {
        "GET": {
            "description": "Get user details",
            "deprecated": null,
            "auth": { "type": "bearer" },
            "path_parameters": {
                "user": { "type": "integer", "required": true }
            },
            "request_schema": { "location": "query", "properties": {} },
            "response_schema": { "type": "object", "properties": {} },
            "response_headers": [],
            "custom_headers": [],
            "rate_limit": null,
            "api_version": "v1",
            "status_codes": {
                "200": "OK",
                "404": "Not Found"
            },
            "content_negotiation": []
        }
    }
}

延伸

自定义模式转换器

创建一个变压器实现 SchemaTransformerInterface:

use Abr4xas\McpTools\Interfaces\SchemaTransformerInterface;

class CustomTransformer implements SchemaTransformerInterface
{
    public function transform(array $schema): array
    {
        // Transform schema
        return $schema;
    }

    public function getPriority(): int
    {
        return 100;
    }
}

在您的服务提供商处注册:

$this->app->make(SchemaTransformerRegistry::class)
    ->register(new CustomTransformer());

测试

运行测试套件:

composer test

运行覆盖率测试:

vendor/bin/pest --coverage

更新日志

请参阅 更新日志 有关最近发生的变化的更多信息。

贡献

请参阅 贡献 了解详情。

安全漏洞

请审阅 我们的安全政策 关于如何报告安全漏洞。

学分

许可证

MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。