Skip to main content
Glama
pvsmark

pvs-mcp-server

by pvsmark
README.md
# SQL Anywhere MCP Server - PM2

Simple PM2 deployment for running one MCP server process per SQL Anywhere database.

## Files

```text
.env                         shared credentials and runtime settings
package.json                 npm scripts
ecosystem.config.cjs         generated PM2 process list
configs/*.json               generated DB connection config files
scripts/generate-configs.cjs config + PM2 generator
src/server.js                MCP server
src/start-connection.js      starts one DB config file
logs/.gitkeep                keeps logs folder in git
```

## 1. Install

```bash
npm install
npm install -g pm2
```

## 2. Set shared credentials

Edit `.env` once:

```env
MCP_SERVER_API_KEY=change-this-user-key
ADMIN_API_KEYS=change-this-admin-key
ODBC_USER=readonly_user
ODBC_PASSWORD=readonly_password
CORS_ALLOWED_ORIGINS=https://your-openwebui-domain.com
```

Use a read-only SQL Anywhere account.

## 3. Generate DB config files and PM2 apps

Generate 5 databases on ports `8081` to `8085`:

```bash
npm run generate:configs -- --count 5 --base-port 8081
```

This creates:

```text
configs/db1.json
configs/db2.json
configs/db3.json
configs/db4.json
configs/db5.json
ecosystem.config.cjs
```

Default generated DSNs are:

```text
DB1_DSN
DB2_DSN
DB3_DSN
DB4_DSN
DB5_DSN
```

To use your real DSN names in one command:

```bash
npm run generate:configs -- --names db1,db2,db3,db4,db5 --dsns TestData,PVSData,PVSales,ValueDB,SALT --base-port 8000
```

To generate a different number of databases:

```bash
npm run generate:configs -- --count 10 --base-port 8081
```

To use a custom DSN naming pattern:

```bash
npm run generate:configs -- --count 5 --dsn-prefix PVS_DB --dsn-suffix _DSN --base-port 8081
```

That generates DSNs like:

```text
PVS_DB1_DSN
PVS_DB2_DSN
PVS_DB3_DSN
PVS_DB4_DSN
PVS_DB5_DSN
```

See all generator options:

```bash
npm run generate:configs -- --help
```

## 4. Check syntax

```bash
npm run check
```

## 5. Test one DB without PM2

```bash
npm run start:one -- configs/db1.json
```

Then open:

```text
http://localhost:8081/health
```

Stop it with `Ctrl+C` after testing.

## 6. Start with PM2

```bash
npm run pm2:start
npm run pm2:save
```

## 7. Monitor

```bash
npm run pm2:status
npm run pm2:logs
```

Health checks:

```text
http://localhost:8081/health
http://localhost:8082/health
http://localhost:8083/health
http://localhost:8084/health
http://localhost:8085/health
```

MCP endpoints:

```text
http://localhost:8081/mcp
http://localhost:8082/mcp
http://localhost:8083/mcp
http://localhost:8084/mcp
http://localhost:8085/mcp
```

Use this auth header from Open WebUI or ChatGPT connector:

```text
Authorization: Bearer <MCP_SERVER_API_KEY>
```

## PM2 commands

```bash
npm run pm2:restart
npm run pm2:stop
npm run pm2:delete
npm run pm2:logs
npm run pm2:status
```