Skip to main content
Glama
rakeshnirzari1

PBS Chat MCP Server

README.md
# PBS Chat MCP Server

A Model Context Protocol (MCP) server for querying the Australian Pharmaceutical Benefits Scheme (PBS) API. This server allows AI assistants like Claude to access real-time PBS data including medicine pricing, prescriber information, schedules, and more.

## Features

- Query PBS items (medicines, pricing, forms, brands)
- Search prescribers and prescribers by PBS code, type, schedule
- Get item overviews with detailed pricing
- Access schedules, ATC codes, organisations, restrictions, criteria
- Get copayment, fee, markup band, program information
- View summary of changes

## Quick Start

### 1. Get a PBS API Subscription Key

1. Visit [PBS Data API Portal](https://data-api-portal.health.gov.au/)
2. Sign up for an account
3. Subscribe to "PBS Public API v3"
4. Get your subscription key from the developer portal

### 2. Local Development

```bash
# Clone and install
git clone https://github.com/rakeshnirzari1/pbs-chat-mcp.git
cd pbs-chat-mcp
npm install

# Configure environment
cp .env.example .env
# Edit .env and add your PBS_API_SUBSCRIPTION_KEY

# Build and run HTTP/SSE server (for Railway/Render remote hosting)
npm run build
npm start
```

On Windows PowerShell, use:

```powershell
Copy-Item .env.example .env
npm run build
npm start
```

### 3. Using with Claude Desktop (Local)

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "pbs-chat": {
      "command": "node",
      "args": ["C:/path/to/pbs-chat-mcp/dist/index.js"],
      "env": {
        "PBS_API_SUBSCRIPTION_KEY": "your-subscription-key-here"
      }
    }
  }
}
```

Important:
- This local config is only needed if you run the server on your own machine.
- For hosted Railway/Render usage, use `mcp-remote` config shown below.

## Remote Deployment (Render)

### 1. Push to GitHub

```bash
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/rakeshnirzari1/pbs-chat-mcp.git
git push -u origin main
```

### 2. Deploy on Render

1. Go to [Render Dashboard](https://dashboard.render.com)
2. Click "New" → "Web Service"
3. Connect your GitHub repo `rakeshnirzari1/pbs-chat-mcp`
4. Configure:
   - **Name**: `pbs-chat-mcp`
   - **Build Command**: `npm install && npm run build`
  - **Start Command**: `npm run start:http`
   - **Instance Type**: Free (or Starter for better reliability)
5. Add Environment Variable:
   - Key: `PBS_API_SUBSCRIPTION_KEY`
   - Value: `your-pbs-subscription-key`
6. Deploy!

### 3. Use as Remote MCP in Claude

Once deployed, you'll get a URL like `https://pbs-chat-mcp.onrender.com`

In Claude Desktop config:

```json
{
  "mcpServers": {
    "pbs-chat": {
      "command": "npx",
      "args": ["-y", "mcp-remote@latest", "https://pbs-chat-mcp.onrender.com/mcp", "--transport", "http-only"],
      "env": {
        "PBS_API_SUBSCRIPTION_KEY": "your-subscription-key-here"
      }
    }
  }
}
```

**Note**: For remote MCP, you'll need the `mcp-remote` package. The hosted server now supports modern Streamable HTTP on `/mcp` and legacy SSE on `/sse`.

## Troubleshooting Claude Desktop Connection

- If Claude shows "failed to connect", confirm the command points to `dist/index.js`.
- For hosted remote servers, prefer `https://<host>/mcp` with `--transport http-only`.
- Use `https://<host>/sse` with `--transport sse-only` only as a fallback.
- Verify your key is set in Claude config `env` or in `.env`.
- Check Claude Desktop logs for startup errors (missing Node, bad path, JSON syntax issues).

## Available Tools

### `pbs_api`

Query any PBS API endpoint.

**Parameters:**
- `endpoint` (required): PBS API endpoint name
- `method`: HTTP method (GET/POST, default: GET)
- `params`: Query parameters object
- `subscriptionKey`: Override default API key
- `timeout`: Request timeout in ms (default: 30000)

**Available Endpoints:**
- `items` - Medicine items with pricing, brands, forms
- `prescribers` - Prescriber information
- `item-overview` - Detailed item information
- `schedules` - PBS schedules
- `atc-codes` - Anatomical Therapeutic Chemical codes
- `organisations` - Pharmaceutical organisations
- `restrictions` - Prescribing restrictions
- `parameters` - API parameters
- `criteria` - Prescribing criteria
- `copayments` - Patient copayment information
- `fees` - Dispensing fees
- `markup-bands` - Wholesale markup bands
- `programs` - PBS programs
- `summary-of-changes` - Schedule changes

## Example Queries

```json
// Search for metformin items
{
  "endpoint": "items",
  "params": {
    "drug_name": "metformin",
    "get_latest_schedule_only": "true",
    "limit": "20"
  }
}

// Get prescribers for a specific PBS code
{
  "endpoint": "prescribers",
  "params": {
    "pbs_code": "10001J",
    "get_latest_schedule_only": "true",
    "limit": "10"
  }
}

// Get item overview with pricing
{
  "endpoint": "item-overview",
  "params": {
    "get_latest_schedule_only": "true",
    "limit": "5"
  }
}
```

## API Rate Limits

The PBS Public API has rate limits:
- **Public API**: 1 request per 20 seconds (shared across all users)
- **Private API**: Higher limits (requires special access)

## Project Structure

```
pbs-chat-mcp/
├── src/
│   ├── index.ts           # MCP server entry point
│   ├── schemas.ts         # Zod schemas for validation
│   └── tools/
│       └── pbsApi.ts      # PBS API client & handler
├── dist/                  # Compiled output
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
└── README.md
```

## License

MIT License - see LICENSE file for details.

## Author

Rakesh Nirzari - [GitHub](https://github.com/rakeshnirzari1)