Skip to main content
Glama
README.md
# Sage MCP - Academic Research Server

An MCP (Model Context Protocol) server that provides LLMs with access to academic papers and periodicals for research-grounded responses.

## Features

- **Full-text search** across papers using SQLite FTS5
- **Topic/publication filtering** for targeted research
- **Paper retrieval** with full content for detailed analysis
- **Extensible database** - add your own papers programmatically

## Tools Available

| Tool | Description |
|------|-------------|
| `search_papers` | Semantic/keyword search across all papers |
| `get_paper` | Retrieve full paper content by ID |
| `list_topics` | Browse available research topics |
| `list_publications` | Browse available journals/sources |
| `get_papers_by_topic` | Filter papers by topic |
| `get_papers_by_publication` | Filter papers by journal |
| `add_paper` | Add new papers to the database |

---

## Quick Start (Local Setup)

### Prerequisites

- **Node.js** 18+ (recommended: 20 LTS)
- **npm** 9+

### 1. Clone/Download and Install

```bash
cd C:\AIapps\SageMCP   # or your chosen directory
npm install
npm run build
```

### 2. Seed the Database

```bash
# Option A: Sample papers (10 ML/AI papers)
npm run seed

# Option B: Import from XML (if you have papers_database.xml)
npm run import-xml
```

### 3. Verify Installation

```bash
npm start
# Should output: "Sage MCP Server running on stdio"
# Press Ctrl+C to stop
```

---

## Connecting to MCP Clients

### Claude Desktop (Windows)

1. **Locate config file:**
   ```
   %APPDATA%\Claude\claude_desktop_config.json
   ```
   Usually: `C:\Users\<YourName>\AppData\Roaming\Claude\claude_desktop_config.json`

2. **Edit the config** (create if doesn't exist):
   ```json
   {
     "mcpServers": {
       "sage": {
         "command": "node",
         "args": ["C:/AIapps/SageMCP/dist/index.js"]
       }
     }
   }
   ```

3. **Restart Claude Desktop** completely (quit from system tray, reopen)

4. **Verify connection:** Look for the hammer 🔨 icon in Claude's chat input - click it to see available tools

### Claude Desktop (macOS)

1. **Config location:**
   ```
   ~/Library/Application Support/Claude/claude_desktop_config.json
   ```

2. **Config content:**
   ```json
   {
     "mcpServers": {
       "sage": {
         "command": "node",
         "args": ["/Users/<you>/path/to/SageMCP/dist/index.js"]
       }
     }
   }
   ```

### Windsurf / Cascade

Add to your MCP settings (Settings → MCP Servers):

```json
{
  "sage": {
    "command": "node",
    "args": ["C:/AIapps/SageMCP/dist/index.js"]
  }
}
```

### Cline (VS Code Extension)

1. Open VS Code settings
2. Search for "Cline MCP"
3. Add server configuration:
   ```json
   {
     "sage": {
       "command": "node",
       "args": ["C:/AIapps/SageMCP/dist/index.js"]
     }
   }
   ```

### Custom MCP Client (Programmatic)

```typescript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';

const transport = new StdioClientTransport({
  command: 'node',
  args: ['C:/AIapps/SageMCP/dist/index.js'],
});

const client = new Client({ name: 'my-client', version: '1.0.0' }, {});
await client.connect(transport);

// List available tools
const tools = await client.listTools();
console.log(tools);

// Call a tool
const result = await client.callTool({
  name: 'search_papers',
  arguments: { query: '神學', limit: 5 }
});
console.log(result);
```

---

## Configuration

### Environment Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `SAGE_DB_PATH` | Custom database file path | `./data/sage.db` |

**Example with custom DB path:**

```json
{
  "mcpServers": {
    "sage": {
      "command": "node",
      "args": ["C:/AIapps/SageMCP/dist/index.js"],
      "env": {
        "SAGE_DB_PATH": "D:/Research/my_papers.db"
      }
    }
  }
}
```

---

## Adding Your Own Papers

### Via the MCP Tool

LLMs can use the `add_paper` tool directly to add papers.

### Via XML Import

Place your XML file in `data/` and run:
```bash
npm run import-xml -- ./data/your_papers.xml
```

### Programmatically

```typescript
import { initDb, addPaper } from './dist/db.js';

await initDb();

addPaper({
  title: 'Your Paper Title',
  authors: 'Author One, Author Two',
  abstract: 'Paper abstract...',
  content: 'Full paper content...',
  publication: 'Journal Name',
  publication_date: '2024-01-15',
  doi: '10.1234/example',
  url: 'https://example.com/paper',
  topics: 'Topic1, Topic2',
  keywords: 'keyword1, keyword2, keyword3'
});
```

---

## Database Schema

Papers are stored in SQLite with full-text search indexing:

| Field | Type | Description |
|-------|------|-------------|
| `id` | INTEGER | Auto-incrementing primary key |
| `title` | TEXT | Paper title |
| `authors` | TEXT | Comma-separated author list |
| `abstract` | TEXT | Paper abstract |
| `content` | TEXT | Full paper text |
| `publication` | TEXT | Journal/conference name |
| `publication_date` | TEXT | Publication date (YYYY-MM-DD) |
| `doi` | TEXT | DOI identifier (optional) |
| `url` | TEXT | URL to paper (optional) |
| `topics` | TEXT | Comma-separated topics |
| `keywords` | TEXT | Comma-separated keywords |

---

## VPS Deployment

Single command deploys everything (from your local machine):

```powershell
# Windows PowerShell
.\deploy\deploy.ps1 -VpsHost "user@your-vps.com"

# Linux/macOS
./deploy/deploy.sh user@your-vps.com
```

This automatically:
1. Installs Node.js and dependencies on VPS
2. Creates `sage` user and directories
3. Copies source files and database
4. Builds the project
5. Sets up and starts systemd service

**Uninstall:**
```powershell
# Windows
.\deploy\uninstall.ps1 -VpsHost "user@your-vps.com"

# Linux/macOS (or directly on VPS)
./deploy/uninstall.sh
```

See [deploy/README.md](deploy/README.md) for detailed options and troubleshooting.

---

## Troubleshooting

### "Cannot find module" errors
```bash
npm run build  # Rebuild TypeScript
```

### Claude Desktop doesn't show tools
1. Check config JSON syntax (use a JSON validator)
2. Ensure path uses forward slashes: `C:/path/to/file` not `C:\path\to\file`
3. Restart Claude Desktop completely (quit from system tray)
4. Check Claude's logs: `%APPDATA%\Claude\logs\`

### Database errors
```bash
# Reset database
rm -rf data/sage.db
npm run seed  # or npm run import-xml
```

### Test MCP server manually
```bash
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node dist/index.js
```

---

## License

MIT