Skip to main content
Glama
Caiuriuller

SRP Hub MCP

by Caiuriuller
README.md
# srp-hub-mcp

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that exposes Hub API operations as tools for AI agents and MCP-compatible clients (e.g. Claude Desktop, GitHub Copilot, Cursor).

## Overview

`srp-hub-mcp` acts as a bridge between AI assistants and the Hub API. It runs as a local stdio-based MCP server, allowing AI agents to interact with Hub resources — such as creating customer leads — using structured, validated inputs.

## Requirements

- Node.js >= 18
- A valid `HUB_API_TOKEN` for authenticating against the Hub API

## Installation

```bash
npm install
npm run build
```

## Configuration

The server is configured via environment variables:

| Variable        | Required | Default                        | Description                          |
|-----------------|----------|--------------------------------|--------------------------------------|
| `HUB_API_TOKEN` | Yes      | —                              | Bearer token for Hub API auth        |
| `HUB_API_BASE`  | No       | `http://localhost:3001/v2`     | Base URL of the Hub API              |

## Usage

### Running directly

```bash
HUB_API_TOKEN=your_token node build/index.js
```

### MCP client configuration

Add the following to your MCP client config (e.g. `mcp.json` or `claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "srp-hub-mcp": {
      "command": "npx",
      "args": ["srp-hub-mcp"],
      "env": {
        "HUB_API_TOKEN": "your_token_here",
        "HUB_API_BASE": "https://your-hub-api.example.com/v2"
      }
    }
  }
}
```

---

## Running on Claude Desktop (Windows) via NPX

### Step 1 — Install Node.js

Download and install **Node.js >= 18** from [https://nodejs.org](https://nodejs.org).  
Choose the **LTS** installer for Windows (`.msi`).

Verify the installation by opening **Command Prompt** or **PowerShell**:

```powershell
node -v   # should print v18.x.x or higher
npm -v
npx -v
```

### Step 2 — Install Claude Desktop

Download and install Claude Desktop from [https://claude.ai/download](https://claude.ai/download).  
Open it at least once so it creates its configuration folder.

### Step 3 — Open the Claude Desktop config file

The configuration file is located at:

```
%APPDATA%\Claude\claude_desktop_config.json
```

You can open it quickly by pressing **Win + R**, pasting the path below, and pressing **Enter**:

```
%APPDATA%\Claude\claude_desktop_config.json
```

Or navigate manually:

```
C:\Users\<YourUsername>\AppData\Roaming\Claude\claude_desktop_config.json
```

> If the file does not exist yet, create it as a new empty file in that folder.

### Step 4 — Add the MCP server configuration

Open `claude_desktop_config.json` with any text editor (e.g. Notepad, VS Code) and add the block below.  
If the file is already empty, paste the entire snippet. If it already has content, merge the `mcpServers` key.

```json
{
  "mcpServers": {
    "srp-hub-mcp": {
      "command": "npx",
      "args": ["-y", "srp-hub-mcp"],
      "env": {
        "HUB_API_TOKEN": "your_token_here",
        "HUB_API_BASE": "https://your-hub-api.example.com/v2"
      }
    }
  }
}
```

> Replace `your_token_here` with your real `HUB_API_TOKEN` and update `HUB_API_BASE` to point to your Hub API instance.  
> The `-y` flag in `args` tells NPX to skip the install confirmation prompt.

### Step 5 — Save and restart Claude Desktop

1. Save `claude_desktop_config.json`.
2. Fully quit Claude Desktop (right-click the tray icon → **Quit**).
3. Re-open Claude Desktop.

### Step 6 — Verify the integration

Start a new conversation in Claude Desktop and ask:

> "What MCP tools do you have available?"

Claude should list `post_customer` among the available tools. You can then ask it to create a customer and it will use the Hub API through this server.

### Troubleshooting

| Problem | Solution |
|---|---|
| `npx: command not found` | Re-install Node.js and make sure it is added to `PATH` |
| `Cannot find package 'srp-hub-mcp'` | The package must be published to npm (`npm publish`) or use a local path (see below) |
| `HUB_API_TOKEN` errors | Double-check the token value in `claude_desktop_config.json` |
| Tools not appearing | Confirm the JSON is valid (no trailing commas) and restart Claude Desktop |

## Available Tools

### `post_customer`

Creates a new customer (lead) in the Hub.

| Field         | Type   | Required | Description                                              |
|---------------|--------|----------|----------------------------------------------------------|
| `codigo`      | string | Yes      | Unique customer code (max 40 chars)                      |
| `tipo`        | number | Yes      | Person type: `1`=Juridical, `2`=Physical, `3`=Export    |
| `cnpjCpf`     | string | Yes      | CPF (11 digits) or CNPJ (14 digits), numbers only        |
| `nomeFantasia`| string | Yes      | Trade name / display name (max 250 chars)               |
| `status`      | number | Yes      | `0`=Inactive, `1`=Active                                 |

**Validation rules:**
- If `tipo` is `2` (Física), `cnpjCpf` must be a valid 11-digit CPF.
- If `tipo` is `1` (Jurídica) or `3` (Exportação), `cnpjCpf` must be a valid 14-digit CNPJ.
- No formatting characters (dots, dashes, slashes) — digits only.

### `post_lead`

Creates a new lead in the Hub via the `/leads` endpoint.

| Field          | Type   | Required | Description                                              |
|----------------|--------|----------|----------------------------------------------------------|
| `codigo`       | string | Yes      | Unique lead code (max 100 chars)                         |
| `email`        | string | Yes      | Valid email address (max 250 chars)                      |
| `nomeFantasia` | string | No       | Trade name / display name (max 250 chars)                |
| `razaoSocial`  | string | No       | Legal/company name (max 250 chars)                       |
| `telefone`     | string | No       | Phone number (max 20 chars)                              |
| `celular`      | string | No       | Mobile number (max 20 chars)                             |
| `origem`       | string | No       | Lead source: `OUTROS` or `RD_STATION`                    |

## Project Structure

```
src/
├── index.ts              # Entry point, stdio transport setup
├── server.ts             # MCP server instance
├── tools/
│   └── customer/
│       ├── handler.ts    # post_customer tool registration and logic
│       └── typings.ts    # Request/response type definitions
└── utils/
    ├── constants.ts      # Shared constants (status, person types, regex)
    └── hub.http.ts       # HTTP client for Hub API requests
build/                    # Compiled output (generated by npm run build)
```

## Development

```bash
# Compile TypeScript
npm run build

# The output binary is at build/index.js
```

## License

ISC

TDQS

B3.1/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The tool's purpose is clearly defined as creating a new customer/lead in the hub, leaving no room for confusion or misselection.

Naming Consistency5/5

The single tool follows a clear verb_noun pattern (post_customer), and with no other tools to compare against, there is no inconsistency in naming conventions. The naming is straightforward and predictable.

Tool Count2/5

One tool is too few for a server named 'SRP Hub MCP', which implies a broader hub functionality. This minimal toolset feels thin and inadequate for typical hub operations like managing, updating, or retrieving customer data, limiting its usefulness.

Completeness2/5

The tool surface is severely incomplete for a hub domain. While it allows creating customers, there are significant gaps: no tools for reading, updating, deleting, or searching customers, which are essential for basic CRUD operations and will likely cause agent failures in handling customer data.

Maintenance

ActivityInactive
ResponsivenessNo issues