A mono-repository for hosting multiple Model Context Protocol (MCP) servers, each deployed as a separate Cloud Run service.
An MCP server that provides tool-based access to the ChEMBL chemical database via the public ChEMBL REST API.
Features:
- 27 MCP tools covering:
- Compound search & retrieval
- Target search & retrieval
- Bioactivity and assay lookup
- Similarity / substructure search
- Basic property and "drug-likeness" summaries derived from ChEMBL molecule properties
- Resource templates (URI reads), including:
chembl://compound/{chembl_id}chembl://target/{chembl_id}chembl://assay/{chembl_id}chembl://activity/{activity_id}chembl://search/{query}
Location: src/chembl/
- Node.js 20+
- pnpm 8+ (for workspace management)
/
├── src/
│ ├── chembl/ # ChEMBL MCP server
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── Dockerfile
│ └── [future-server]/ # Additional MCP servers
├── package.json # Root workspace config
├── pnpm-workspace.yaml # pnpm workspace definition
└── tsconfig.json # Base TypeScript config
- Install pnpm (if not already installed):
npm install -g pnpm- Install dependencies:
pnpm install- Build all servers:
pnpm buildOr build a specific server:
pnpm build:chemblpnpm --filter @mcp-mono/chembl startAdd to an MCP client (example):
{
"mcpServers": {
"chembl": {
"command": "node",
"args": ["/absolute/path/to/ChEMBL-MCP-Server/build/chembl/index.js"],
"env": {}
}
}
}pnpm --filter @mcp-mono/chembl start:httpThe server binds to 0.0.0.0:${PORT:-8080} and exposes HTTP/SSE endpoints.
Watch mode for development:
# All servers
pnpm dev
# Specific server
pnpm dev:chemblPush to main branch triggers automatic deployment to Cloud Run for changed servers only.
The CI/CD pipeline:
- Detects which servers have changes
- Builds and pushes Docker images for changed servers
- Deploys to Cloud Run as separate services (e.g.,
chembl-mcp-dev)
Use GitHub Actions workflow dispatch:
- Go to Actions → "Build and Deploy MCP Servers (Production)"
- Click "Run workflow"
- Enter servers to deploy (e.g.,
chemblorall)
Each server deploys to its own Cloud Run service (e.g., chembl-mcp-prod)
Build a specific server:
docker build -f src/chembl/Dockerfile -t chembl-mcp-server .
docker run -p 8080:8080 chembl-mcp-serverSee ADDING_NEW_SERVER.md for a comprehensive step-by-step guide.
Quick summary:
- Create
src/your-server-name/directory - Add required files:
index.ts,package.json,tsconfig.json,Dockerfile - Update root
package.jsonwith build scripts - Test locally with Docker
- Commit and push - CI/CD automatically deploys!
Critical requirements:
- Use
@mcp-mono/your-server-nameas package name - Create node_modules symlink in Dockerfile:
RUN ln -s /app/src/your-server-name/node_modules /app/build/your-server-name/node_modules - Bind HTTP server to
'0.0.0.0'for Cloud Run compatibility - Parse PORT as integer:
parseInt(process.env.PORT || '8080', 10)
- Each MCP server runs as a separate Cloud Run service for isolation and independent scaling
- Only changed servers are deployed automatically
- ChEMBL Data source: ChEMBL REST API (
https://www.ebi.ac.uk/chembl/api/data) - No API key required for public ChEMBL endpoints (subject to availability and rate limits)