MCP Servers
Privacy-first MCP servers that never phone home
Connect Claude to your tools without sacrificing privacy.
All servers run 100% locally. Your data stays yours.
Demo
# Ask Claude about your Linear issues
> "What bugs are assigned to me?"
# Query your local Postgres database
> "Show me users who signed up this week"
# Search your Obsidian vault
> "Find my notes about authentication"
Install in 30 Seconds
npx mcp-servers-cli init
That's it. The CLI will:
- Detect which tools you use (Linear, Notion, Obsidian, etc.)
- Walk you through API key setup
- Auto-configure Claude Code
Or install manually:
npm install -g mcp-servers-cli
# Add a specific server
mcp-servers add linear
mcp-servers add postgres
mcp-servers add obsidian
Available Servers
| Server | Description | Type | Install |
|---|---|---|---|
| linear | Issue tracking & project management | Cloud | mcp-servers add linear |
| postgres | Query PostgreSQL databases | Local | mcp-servers add postgres |
| notion | Search & create Notion pages | Cloud | mcp-servers add notion |
| obsidian | Search your local Obsidian vault | Local | mcp-servers add obsidian |
| sqlite | Query local SQLite databases | Local | mcp-servers add sqlite |
| github | Access repos, issues, and PRs | Cloud | mcp-servers add github |
| filesystem | Read and search local files | Local | mcp-servers add filesystem |
Why These Servers?
Privacy by Default
Every server runs locally on your machine. We never:
- Send your data to external servers
- Require account creation
- Phone home for analytics
Your Linear issues, database queries, and Obsidian notes stay on your computer.
Batteries Included
Other MCP servers make you:
- Clone repos and build from source
- Manually edit JSON config files
- Figure out dependencies yourself
We give you one command and you're done.
Production Ready
- Full TypeScript with strict types
- Comprehensive error handling
- Rate limiting built-in
- Works with Claude Code, Cursor, Continue, and any MCP client
Quick Examples
Linear: Manage Issues
You: "What issues are in the current sprint?"
Claude: I found 12 issues in Sprint 24:
- AUTH-142: Fix login redirect (In Progress)
- AUTH-143: Add 2FA support (Todo)
...
You: "Create a bug for the header alignment issue"
Claude: Created issue AUTH-156: "Header alignment issue"
Priority: Medium, Status: Backlog
Postgres: Query Your Database
You: "How many users signed up this month?"
Claude: I ran: SELECT COUNT(*) FROM users WHERE created_at > '2026-01-01'
Result: 1,247 new users this month
You: "Show me the schema for the orders table"
Claude: orders table:
- id: uuid (primary key)
- user_id: uuid (foreign key → users)
- total: decimal(10,2)
- status: varchar (pending/paid/shipped)
- created_at: timestamp
Obsidian: Search Your Notes
You: "Find my notes about React patterns"
Claude: Found 3 relevant notes:
1. React/Component Patterns.md - compound components, render props
2. React/State Management.md - Redux vs Zustand comparison
3. Projects/App Refactor.md - mentions React context patterns
You: "What did I write about authentication last week?"
Claude: From your daily notes (Jan 2-4):
- Researched OAuth 2.0 PKCE flow
- Decided on NextAuth.js for the project
- TODO: Set up Google provider
GitHub: Manage Repos & Issues
You: "What PRs need my review?"
Claude: Found 3 open PRs requesting your review:
#142 - Add dark mode support (from @alex)
#139 - Fix memory leak in worker (from @sam)
#138 - Update dependencies (from dependabot)
You: "Create an issue for the login bug"
Claude: Created issue #156: "Login redirect fails on Safari"
https://github.com/myorg/app/issues/156
SQLite: Query Local Databases
You: "What tables are in the analytics database?"
Claude: Found 5 tables:
- events (1.2M rows) - user events with timestamps
- sessions (89K rows) - session tracking
- users (12K rows) - user profiles
...
You: "Show me the top pages by views"
Claude: SELECT page, COUNT(*) as views FROM events
WHERE type = 'pageview' GROUP BY page ORDER BY views DESC
/dashboard 45,231
/settings 12,847
/profile 8,392
Filesystem: Read & Search Files
You: "Find all TypeScript files with 'auth' in the name"
Claude: Found 8 files matching **/*auth*.ts:
src/lib/auth.ts
src/middleware/authMiddleware.ts
src/hooks/useAuth.ts
...
You: "Search for TODO comments in the src folder"
Claude: Found 12 TODOs:
src/api/users.ts:42 - TODO: Add rate limiting
src/components/Form.tsx:89 - TODO: Validate email format
...
Configuration
Auto-Configuration (Recommended)
npx mcp-servers-cli init
Manual Configuration
Add to ~/.claude/mcp.json:
{
"servers": {
"linear": {
"command": "mcp-servers",
"args": ["run", "linear"],
"env": {
"LINEAR_API_KEY": "lin_api_xxxxx"
}
},
"postgres": {
"command": "mcp-servers",
"args": ["run", "postgres"],
"env": {
"POSTGRES_URL": "postgresql://localhost:5432/mydb"
}
},
"obsidian": {
"command": "mcp-servers",
"args": ["run", "obsidian"],
"env": {
"OBSIDIAN_VAULT": "~/Documents/MyVault"
}
}
}
}
Environment Variables
| Server | Variable | Description |
|---|---|---|
| linear | LINEAR_API_KEY | Get your API key |
| postgres | POSTGRES_URL | PostgreSQL connection string |
| notion | NOTION_API_KEY | Create integration |
| obsidian | OBSIDIAN_VAULT | Path to your vault folder |
| sqlite | SQLITE_PATH | Path to SQLite database file |
| github | GITHUB_TOKEN | Create token |
| filesystem | FS_ROOT | Root directory to allow access to |
Rate Limiting
API-based servers include built-in rate limiting to prevent accidental quota exhaustion. Default: 30 requests/minute.
| Server | Variable | Default |
|---|---|---|
| linear | LINEAR_RATE_LIMIT | 30/min |
| notion | NOTION_RATE_LIMIT | 30/min |
| github | GITHUB_RATE_LIMIT | 30/min |
To adjust limits:
{
"servers": {
"github": {
"command": "mcp-servers",
"args": ["run", "github"],
"env": {
"GITHUB_TOKEN": "ghp_xxxxx",
"GITHUB_RATE_LIMIT": "60"
}
}
}
}
Architecture
┌─────────────────────────────────────────────────────────────────────────────┐
│ Claude / Cursor / IDE │
└─────────────────────────────────┬───────────────────────────────────────────┘
│ MCP Protocol
┌─────────────────────────────────▼───────────────────────────────────────────┐
│ mcp-servers-cli │
│ │
│ Cloud Servers Local Servers │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ Linear │ │ Notion │ │Postgres│ │Obsidian│ │ SQLite │ │ Files │ │
│ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ │
│ │ │ │ │ │ │ │
│ ┌───┴────┐ │ │ │ │ │ │
│ │ GitHub │ │ │ │ │ │ │
│ └───┬────┘ │ │ │ │ │ │
└───────┼──────────┼───────────────┼──────────┼──────────┼──────────┼────────┘
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
External External Local Local Local Local
APIs APIs Database Vault Database Filesystem
All processing happens locally. API calls go directly from your machine to the service—we're never in the middle.
Development
# Clone and install
git clone https://github.com/joshduffy/mcp-servers.git
cd mcp-servers
npm install
# Build all servers
npm run build
# Run a specific server in dev mode
npm run dev --workspace=servers/linear-mcp
# Run tests
npm test
Creating a New Server
# Scaffold a new server
npm run create-server my-server
# This creates:
# servers/my-server-mcp/
# ├── src/
# │ ├── index.ts # Entry point
# │ ├── tools.ts # Tool definitions
# │ └── client.ts # API client
# ├── package.json
# └── tsconfig.json
Contributing
We welcome contributions! Areas we'd love help with:
- New servers: Todoist, Cal.com, Raycast, Slack, Discord
- Improvements: Better error messages, more tools per server
- Documentation: Tutorials, video guides
See CONTRIBUTING.md for guidelines.
Comparison
| Feature | mcp-servers-cli | Other MCP Servers |
|---|---|---|
| One-command install | ✅ npx init | ❌ Clone + build |
| Auto-configuration | ✅ Detects your tools | ❌ Manual JSON editing |
| Privacy-first | ✅ 100% local | ⚠️ Varies |
| Multiple servers | ✅ Bundled together | ❌ Separate repos |
| TypeScript | ✅ Full types | ⚠️ Varies |
| Maintained | ✅ Active | ⚠️ Many abandoned |
Links
- MCP Protocol Spec
- Claude Code
- pulselab.cc - Privacy-first software
Built with care by pulselab.cc