Skip to main content
Glama
README.md
# Coverity MCP Server

A TypeScript [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that connects AI agents to [Black Duck Coverity Connect](https://www.blackduck.com/static-analysis-sast-coverity.html) for static analysis defect management.

Give your AI coding assistant direct access to Coverity projects, streams, and defect data — so it can find issues, understand their root cause via event traces, and fix them in your codebase.

## Features

- **List projects** — browse all Coverity projects you have access to
- **List streams** — view analysis streams, optionally filtered by project
- **Search issues** — find defects by stream with filters for checker, impact, status, and pagination
- **Get issue details** — retrieve full defect info including the event trace (code path leading to the defect) and triage data
- **Two transport modes** — stdio for Claude Desktop / CLI, HTTP for web-based integrations

## Prerequisites

- Node.js >= 20.11.0
- Access to a Coverity Connect instance with REST API enabled
- A Coverity authentication key (generated from your Coverity Connect user settings)

## Quick Start

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

Create a `.env` file from the example:

```bash
cp .env.example .env
```

Edit `.env` with your Coverity Connect credentials:

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

Run the server:

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

## Claude Desktop Configuration

Add this to your `claude_desktop_config.json`:

```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"
      }
    }
  }
}
```

For HTTP transport mode, use the MCP endpoint URL instead:

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

## Tools

### `list_projects`

List all Coverity projects the authenticated user can access.

**Parameters:** none

**Returns:** project name, key, description, and associated streams.

---

### `list_streams`

List Coverity streams, optionally filtered by project name.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `projectName` | string | no | Filter streams by project name |

**Returns:** stream name, language, description, and parent project.

---

### `search_issues`

Search for static analysis defects in a Coverity stream.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `streamId` | string | yes | Stream name or ID to search in |
| `checker` | string | no | Filter by checker (e.g. `RESOURCE_LEAK`, `NULL_RETURNS`) |
| `impact` | string | no | Filter by impact: `High`, `Medium`, `Low` |
| `status` | string | no | Filter by status: `New`, `Triaged`, `Fixed`, `Dismissed` |
| `limit` | number | no | Max results, 1–200 (default 25) |
| `offset` | number | no | Pagination offset (default 0) |

**Returns:** CID, checker, type, impact, status, file, and function for each defect.

---

### `get_issue_details`

Get full details for a specific defect, including the event trace that shows the code path leading to the issue.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `cid` | number | yes | Coverity Issue ID |
| `streamId` | string | yes | Stream name or ID containing the issue |

**Returns:** complete defect information with triage data (action, classification, severity, owner) and event chain (step-by-step code path with file and line numbers).

## Resources

### `coverity://server-info`

Read-only resource showing the current Coverity server connection configuration (host, port, SSL, user). Does not expose the authentication key.

## Typical Workflow

A code agent using this server would typically:

1. **`list_projects`** — discover available projects
2. **`list_streams`** — find the relevant stream for the codebase
3. **`search_issues`** — find defects (filter by `impact: "High"` for critical ones)
4. **`get_issue_details`** — get the event trace for a specific defect
5. **Read the source file** at the reported location and **apply a fix** based on the event trace

## Environment Variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `COVERITY_HOST` | yes | — | Coverity Connect server hostname |
| `COVERITY_PORT` | no | `8443` | Server port |
| `COVERITY_SSL` | no | `true` | Use HTTPS |
| `COVERITY_USER` | yes | — | Username |
| `COVERITY_AUTH_KEY` | yes | — | Authentication key |
| `TRANSPORT` | no | `stdio` | Transport mode: `stdio` or `http` |
| `PORT` | no | `3000` | HTTP server port (only with `TRANSPORT=http`) |

## Development

```bash
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
```

### Project Structure

```
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
```

### Adding a New Tool

Create a file in `src/tools/` — it will be auto-discovered at startup:

```typescript
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;
```

## License

MIT

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinctly different resource or level of detail: projects vs streams vs issue summaries vs full issue detail. There is no meaningful overlap between the tools.

Naming Consistency5/5

All tool names use a consistent lowercase snake_case verb_noun pattern: list_projects, list_streams, get_issue_details, search_issues. The verbs map predictably to the action being performed.

Tool Count5/5

Four tools is a reasonable, focused set for a read-only Coverity query server. Each tool serves a necessary step in navigating from projects and streams down to specific defect details.

Completeness4/5

The tool set covers the core read-only workflow: identify project, identify stream, search defects, and view full issue details. Minor gaps exist, such as no triage update or project/stream detail endpoints, but they do not block the primary use case.

Maintenance

ActivityInactive
ResponsivenessNo issues