Skip to main content
Glama
alexpavluck

NTDeliver MCP Server

by alexpavluck
README.md
# NTDeliver MCP Server

MCP server exposing NTDeliver purchase order and milestone data (1,729 POs, 2014-2027).
Supports two transport modes: **stdio** (local) and **HTTP/SSE** (hosted, shared URL).

---

## Quick start — local use

```bash
npm install
npm start
```

Add to Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "ntdeliver": {
      "command": "node",
      "args": ["/full/path/to/ntdeliver-mcp/src/index.js"]
    }
  }
}
```

---

## Shared access — one URL, no install required

### Railway (recommended)

1. Push this repo to GitHub
2. Go to [railway.app](https://railway.app), create a project from the repo
3. Set env vars: `MCP_TRANSPORT=http`, `PORT=3000`
4. Railway detects the Dockerfile and deploys automatically

Your MCP URL: `https://your-app.up.railway.app/sse`

### Render

1. Create a Web Service from the repo
2. Set env vars: `MCP_TRANSPORT=http`, `PORT=10000`

### Local HTTP mode (for testing)

```bash
MCP_TRANSPORT=http PORT=3000 node src/index.js
# Health check: curl http://localhost:3000/health
```

---

## Connecting to a hosted server

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "ntdeliver": {
      "url": "https://your-app.up.railway.app/sse"
    }
  }
}
```

Share that URL — anyone adds the same block and gets live NTDeliver data.

---

## Tools

| Tool | Description |
|------|-------------|
| `ntd_schema` | Column names, row count, milestone list, known filter values, sample row |
| `ntd_list_pos` | Filter POs by country, donor, drug, region, year, shipment mode |
| `ntd_get_po` | Full record + all milestones for a single PO number |
| `ntd_get_milestones` | Milestone dates and progress for matching POs |
| `ntd_milestone_completion` | % of POs with each milestone recorded, across any filter set |
| `ntd_summary_stats` | PO counts and tablet totals grouped by donor/country/drug/region/year |
| `ntd_list_values` | All distinct values for any column |
| `ntd_days_to_mda` | POs sorted by days until MDA, with optional max-days filter |

Known donors: GSK, Eisai, Merck USA, Merck KGaA, J&J
Known drugs: ALB, DEC, IVM, MEB, PZQ, TCZ
Known regions: AFRO, AMRO, EMRO, EURO, SEARO, WPRO
Years: 2014-2027

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: schema discovery, listing/filtering POs, getting full details, milestone queries, aggregate statistics, value enumeration, and days-to-MDA analysis. No two tools overlap in function, making selection unambiguous.

Naming Consistency3/5

All tools share the 'ntd_' prefix, but the naming convention is inconsistent: some use verb_noun ('list_pos', 'get_po', 'get_milestones', 'list_values'), while others are noun phrases ('schema', 'milestone_completion', 'summary_stats', 'days_to_mda'). This mixed pattern reduces predictability.

Tool Count5/5

With eight tools, the server is well-scoped for a read-only data exploration API focused on NTD delivery POs. Each tool adds unique value without redundancy, and the count is appropriate for the domain's complexity.

Completeness5/5

The tool set covers all likely needs for querying an NTD delivery database: schema introspection, filtered lists, single-record details, milestone tracking, aggregate statistics, value discovery, and a specialized analytical query. There are no obvious gaps for a read-only server.

Maintenance

ActivityInactive
ResponsivenessNo issues