静态分析缺陷管理服务器

一个连接AI代理与Black Duck Coverity Connect的TypeScript服务器,用于静态分析缺陷管理,使AI编码助手能够直接访问Coverity项目、流和缺陷数据。

  • by baxishrey
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 baxishrey/Coverity-MCP-Server-Typescript

使用说明

Coverity MCP服务器

TypeScript 模型上下文协议 将AI代理连接到的(MCP)服务器 黑鸭隐蔽连接 用于静态分析缺陷管理。

让你的AI编码助手直接访问Coverity项目、流和缺陷数据,这样它就可以发现问题,通过事件跟踪了解其根本原因,并在你的代码库中修复它们。

特性

  • 列出项目 --浏览您有权访问的所有Coverity项目
  • 列出流 --查看分析流,可选择按项目筛选
  • 搜索问题 --使用检查器、影响、状态和分页过滤器按流查找缺陷
  • 获取问题详细信息 --检索完整的缺陷信息,包括事件跟踪(导致缺陷的代码路径)和分类数据
  • 两种运输方式 --stdio用于Claude Desktop/CLI,HTTP用于基于web的集成

先决条件

  • Node.js>=20.11.0
  • 访问启用REST API的Coverity Connect实例
  • Coverity身份验证密钥(由您的Coverity Connect用户设置生成)

快速开始

git clone https://github.com/baxishrey/Coverity-MCP-Server-Typescript.git
cd Coverity-MCP-Server-Typescript
npm install
npm run build

创建一个 .env 示例中的文件:

cp .env.example .env

编辑 .env 使用您的Coverity Connect凭据:

COVERITY_HOST=coverity.example.com
COVERITY_PORT=8443
COVERITY_SSL=true
COVERITY_USER=your_username
COVERITY_AUTH_KEY=your_auth_key

运行服务器:

npm start          # stdio transport (default)
npm run start:http # HTTP transport on port 3000

Claude桌面配置

将此添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "coverity": {
      "command": "node",
      "args": ["/path/to/Coverity-MCP-Server-Typescript/build/index.js"],
      "env": {
        "COVERITY_HOST": "coverity.example.com",
        "COVERITY_PORT": "8443",
        "COVERITY_SSL": "true",
        "COVERITY_USER": "your_username",
        "COVERITY_AUTH_KEY": "your_auth_key"
      }
    }
  }
}

对于HTTP传输模式,请改用MCP端点URL:

{
  "mcpServers": {
    "coverity": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}

工具

list_projects

列出经过身份验证的用户可以访问的所有Coverity项目。

参数: 无

退货: 项目名称、密钥、描述和相关流。


list_streams

列出Coverity流,可选择按项目名称筛选。

参数 类型 必填 说明
projectName string no 按项目名称筛选流

退货: 流名称、语言、描述和父项目。


search_issues

在Coverity流中搜索静态分析缺陷。

参数 类型 必填 说明
streamId string yes 要搜索的流名称或ID
checker string no 按检查器筛选(例如。 RESOURCE_LEAK, NULL_RETURNS)
impact string no 按影响筛选: High, Medium, Low
status string no 按状态筛选: New, Triaged, Fixed, Dismissed
limit number no 最大结果,1–200(默认值25)
offset number no 分页偏移量(默认值0)

退货: 每个缺陷的CID、检查器、类型、影响、状态、文件和功能。


get_issue_details

获取特定缺陷的完整详细信息,包括显示导致问题的代码路径的事件跟踪。

参数 类型 必填 说明
cid number yes 封面问题ID
streamId string yes 包含问题的流名称或ID

退货: 完整的缺陷信息,包括分类数据(操作、分类、严重性、所有者)和事件链(带文件和行号的分步代码路径)。

资源

coverity://server-info

显示当前Coverity服务器连接配置(主机、端口、SSL、用户)的只读资源。不公开身份验证密钥。

典型工作流程

使用此服务器的代码代理通常会:

  1. list_projects --发现可用项目
  2. list_streams --查找代码库的相关流
  3. search_issues --查找缺陷(按以下条件筛选 impact: "High" 对于关键的)
  4. get_issue_details --获取特定缺陷的事件跟踪
  5. 读取源文件 在报告的地点和 应用修复 基于事件跟踪

环境变量

变量 必填 默认 描述
COVERITY_HOST 是 -- Coverity Connect服务器主机名
COVERITY_PORT 没有 8443 服务器端口
COVERITY_SSL 没有 true 使用HTTPS
COVERITY_USER 是 -- 用户名
COVERITY_AUTH_KEY 是 -- 身份验证密钥
TRANSPORT 没有 stdio 运输方式: stdio 或 http
PORT 没有 3000 HTTP服务器端口(仅限 TRANSPORT=http)

发展

npm run dev          # run from source without compiling
npm run build        # compile TypeScript → build/
npm test             # run tests
npm run lint         # type-check without emitting

项目结构

src/
├── index.ts                    # Entry point
├── server/boot.ts              # MCP server init, transport selection
├── registry/                   # Auto-discovers modules in tools/resources/prompts
├── client/coverity-client.ts   # Coverity REST API client
├── tools/                      # MCP tool implementations
│   ├── list-projects.ts
│   ├── list-streams.ts
│   ├── search-issues.ts
│   └── get-issue-details.ts
└── resources/
    └── server-info.ts          # Server connection info resource

添加新工具

在中创建文件 src/tools/ --它将在启动时自动发现:

import { z } from "zod";
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import type { RegisterableModule } from "../registry/types.js";

export default {
  type: "tool",
  name: "my-tool",
  description: "Does something useful",
  register(server: McpServer) {
    server.tool("my_tool", "Description", {
      param: z.string().describe("A parameter"),
    }, async ({ param }) => {
      return { content: [{ type: "text", text: `Result: ${param}` }] };
    });
  },
} satisfies RegisterableModule;

许可证

麻省理工学院