Skip to main content
Glama
tatavarthitarun

nowsecure-mcp-server

README.md
# NowSecure MCP Server ๐ŸŽˆ๐Ÿ’œ

> Made by **Tatavarthi Tarun** ยท [LinkedIn](https://www.linkedin.com/in/tatav)

A small Model Context Protocol (MCP) server for NowSecure Platform. Built to work
around the broken UI PDF export
(`Failed to load report data: Enum "JiraIntegrationCustomFieldType" cannot represent value: ""`)
by pulling findings through the REST + GraphQL APIs and, when needed, rendering
the remediation PDF locally instead of relying on NowSecure's report service.

## Requirements

- **Node.js >= 18** (the only prerequisite โ€” `npx` fetches the package on demand)
- A **NowSecure Platform API token (PAT)** โ€” each user supplies their own (see [Auth](#auth-each-user-uses-their-own-token))

## Tools

| Tool | What it does |
|------|--------------|
| `list_applications` | Lists your portfolio apps (REST). Find app refs + latest assessment. |
| `get_remediation_findings` | Returns findings needing remediation as JSON (GraphQL). Ideal for feeding an agent. |
| `generate_remediation_pdf` | Renders a clean PDF **locally** from the findings. Works even when NowSecure's renderer fails. |
| `download_assessment_pdf` | Tries NowSecure's REST PDF endpoint (separate path from the broken UI export). |

## Auth (each user uses their own token)

Every user generates their **own** NowSecure Platform API bearer token (PAT) and
puts it in their local MCP config. No token is bundled with this package.

Create one in Platform: Profile icon (top right) > Tokens.

- `NOWSECURE_TOKEN` (required) โ€” your personal PAT
- `NOWSECURE_API_BASE` (optional) โ€” defaults to `https://api.nowsecure.com`

## Install

No clone or manual install needed โ€” `npx` fetches and runs the latest version.
You just need Node.js >= 18.

## MCP client config

All examples run the package via `npx` (no clone/install needed โ€” just Node.js
>= 18). Replace the token with your **own** personal PAT.

### Claude Code

Use the CLI (recommended โ€” it validates and writes to the right file):

```bash
claude mcp add nowsecure --env NOWSECURE_TOKEN=<your-personal-pat-here> -- npx -y nowsecure-mcp-server
```

Add `--scope user` to make it available across all your projects. Or edit
`.mcp.json` (project) / `~/.claude.json` (user) directly:

```json
{
  "mcpServers": {
    "nowsecure": {
      "command": "npx",
      "args": ["-y", "nowsecure-mcp-server"],
      "env": { "NOWSECURE_TOKEN": "<your-personal-pat-here>" }
    }
  }
}
```

### Cursor

Edit `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (per project):

```json
{
  "mcpServers": {
    "nowsecure": {
      "command": "npx",
      "args": ["-y", "nowsecure-mcp-server"],
      "env": { "NOWSECURE_TOKEN": "<your-personal-pat-here>" }
    }
  }
}
```

### Google Antigravity

In the agent panel / Settings, open **MCP Servers โ†’ Manage / Raw Config** to edit
`mcp_config.json`, then add:

```json
{
  "mcpServers": {
    "nowsecure": {
      "command": "npx",
      "args": ["-y", "nowsecure-mcp-server"],
      "env": { "NOWSECURE_TOKEN": "<your-personal-pat-here>" }
    }
  }
}
```

### GitHub Copilot (VS Code)

VS Code uses a top-level `servers` key (not `mcpServers`). Add to `.vscode/mcp.json`
in your workspace, or your user `mcp.json` (Command Palette โ†’ *MCP: Open User
Configuration*):

```json
{
  "servers": {
    "nowsecure": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "nowsecure-mcp-server"],
      "env": { "NOWSECURE_TOKEN": "<your-personal-pat-here>" }
    }
  }
}
```

### Kiro

Add to `~/.kiro/settings/mcp.json` (global) or `.kiro/settings/mcp.json` (workspace):

```json
{
  "mcpServers": {
    "nowsecure": {
      "command": "npx",
      "args": ["-y", "nowsecure-mcp-server"],
      "env": { "NOWSECURE_TOKEN": "<your-personal-pat-here>" },
      "disabled": false,
      "autoApprove": ["list_applications", "get_remediation_findings"]
    }
  }
}
```

> If published to a private/scoped registry, use the scoped name instead, e.g.
> `"args": ["-y", "@your-scope/nowsecure-mcp-server"]`.

## Example usage

First list your apps with `list_applications` to find an app ref, then ask your
agent (placeholders shown โ€” substitute your own refs):

> Generate a remediation PDF for app `<app-ref-uuid>` to ./remediation.pdf

If you omit the assessment ref, the latest assessment for that app is used.

---

## Author

**Tatavarthi Tarun** ๐ŸŽˆ๐Ÿ’œ
[linkedin.com/in/tatav](https://www.linkedin.com/in/tatav)

If this saved you from NowSecure's broken PDF export, a connect on LinkedIn is appreciated!

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: downloading PDF, generating local PDF, getting structured findings, listing apps, and running arbitrary GraphQL queries. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (download_assessment_pdf, generate_remediation_pdf, get_remediation_findings, list_applications, run_graphql). The naming convention is uniform and predictable.

Tool Count5/5

With 5 tools, the server is well-scoped for a remediation-focused workflow. It provides enough functionality without unnecessary bloat, and each tool earns its place.

Completeness4/5

The tool set covers the core remediation workflow (list apps, get findings, generate PDF) and includes a GraphQL escape hatch for custom operations. Minor gaps like direct update/delete actions are missing but can be addressed via run_graphql.

Maintenance

ActivityInactive
ResponsivenessNo issues