Skip to main content
Glama
samrathp29
by samrathp29
README.md
# covidence-mcp

An MCP connector that lets Claude screen studies in [Covidence](https://app.covidence.org) using its own intelligence — no brittle CSS selectors, no hardcoded click paths.

## How it works

Instead of a static Playwright script, Claude navigates Covidence directly using **Claude in Chrome**. It reads the live page, finds the right buttons by understanding what it sees, and casts votes — the same way a human would. When Covidence updates their UI, nothing breaks.

The MCP server itself is intentionally thin: it stores your inclusion/exclusion criteria per review and keeps a session vote log. All actual browser interaction is handled by Claude.

```
You ──► Claude ──► covidence_screen (MCP)
                        │
                        ▼
              Returns screening prompt
                        │
                        ▼
         Claude navigates Chrome directly
         (read_page → reason → find → click)
                        │
                        ▼
              Votes cast in Covidence
```

---

## Setup

There are two ways to connect, depending on whether you're using Claude Desktop or the claude.ai web app.

---

### Option A — Claude Desktop (local)

**Requirements:** Node.js ≥ 18, Claude Desktop app

```bash
git clone <this repo>
cd covidence-mcp
npm install
npm run build
```

Add to your Claude Desktop config:

**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "covidence": {
      "command": "node",
      "args": ["/absolute/path/to/covidence-mcp/dist/index.js"]
    }
  }
}
```

Restart Claude Desktop. Done.

---

### Option B — claude.ai web (remote hosting)

Claude.ai supports remote MCP servers over SSE. You deploy this server somewhere public and give Claude the URL — no desktop app required.

**Requirements:** A free account on [Railway](https://railway.app), [Render](https://render.com), or any host that can run Node.js

#### 1. Deploy to Railway (easiest)

[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app)

Or manually:

```bash
# Push this folder to a GitHub repo, then:
# 1. Create a new Railway project from that repo
# 2. Railway auto-detects Node.js and runs `npm run build && npm start`
# 3. Set the PORT environment variable (Railway sets this automatically)
```

The server switches to HTTP mode automatically when `PORT` is set. Your public URL will look like:

```
https://covidence-mcp-production.up.railway.app
```

#### 2. Connect to claude.ai

1. Go to **claude.ai → Settings → Integrations**
2. Click **Add custom connector**
3. Enter your server URL: `https://your-deployment.up.railway.app/sse`
4. Save — Claude will confirm the connection

#### Deploy to Render (alternative)

1. Create a new **Web Service** from your GitHub repo
2. Build command: `npm install && npm run build`
3. Start command: `node dist/index.js`
4. Render sets `PORT` automatically

#### Deploy to Fly.io (alternative)

```bash
fly launch
fly deploy
```

Then connect `https://your-app.fly.dev/sse` in Claude's integrations settings.

---

## Usage

Once connected (either way), the workflow is the same.

**First time — tell Claude your login and criteria:**
```
Log in to Covidence with researcher@university.edu, then save these criteria for review 12345:
Include: RCTs and quasi-experimental studies in adults with type 2 diabetes.
Exclude: animal studies, systematic reviews, non-English publications, studies before 2000.
```

**Screen a batch:**
```
Screen the next 20 studies in review 12345.
```

Claude calls `covidence_screen`, opens Covidence in Chrome, reads a batch of abstracts, applies your criteria, and votes on all of them.

**Check progress:**
```
How many studies have we screened today?
```

---

## Tools

| Tool | What it does |
|---|---|
| `covidence_login` | Starts a session and returns Chrome navigation steps for login |
| `covidence_set_criteria` | Saves inclusion/exclusion criteria for a review ID |
| `covidence_screen` | Builds a full screening prompt — Claude uses this to drive Chrome |
| `covidence_log_vote` | Records a vote in the session log |
| `covidence_get_session_log` | Returns all votes cast this session with totals |
| `covidence_nav` | Returns plain-English navigation steps for any specific action |


---

## License

MIT

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation2/5

Tool boundaries are muddled because covidence_login duplicates the login action in covidence_nav, and covidence_screen returns a full prompt that covers the same reading/voting instructions available via covidence_nav. The remaining tools are distinct, but these overlapping pairs make selection ambiguous.

Naming Consistency3/5

The consistent covidence_ prefix and snake_case help, but the forms are mixed: login and screen are bare verbs, nav is an abbreviation, while set_criteria, log_vote, and get_session_log follow a verb_noun pattern. This is readable but not a uniform naming convention.

Tool Count5/5

With six tools, the server is well-scoped for its niche purpose of guiding Covidence screening sessions. The count is neither bloated nor too thin, and each tool contributes to the core workflow.

Completeness4/5

The core screening loop—login, set criteria, screen, log votes, and view the session log—is covered, with nav supplying supporting instructions for Chrome-driven actions. Minor gaps like no explicit criteria retrieval or session-end tool are workable but prevent a perfect score.

Maintenance

ActivityInactive
ResponsivenessNo issues