6.1 KiB
MCP Notion + Linear Integration Setup
Overview
The MCP (Model Context Protocol) server at mcp_notion_linear.py provides unified access to Notion and Linear APIs using existing Research Stack surfaces:
- Notion: Research database management, page creation, content sync
- Linear: Issue tracking, project management, workflow automation
- ENE Integration: Credential management via distributed node encryption (planned)
- Web Surface: HTTP API calls via SwarmWebSurface
Architecture
Claude Code
↓
MCP Server (mcp_notion_linear.py)
↓
SwarmWebSurface (infra/web_interaction_surface.py)
↓
HTTP APIs (Notion, Linear)
↓
ENE (Credential Management - planned)
Prerequisites
1. MCP SDK Installation
pip install mcp
2. Notion Setup
Follow the instructions in docs/NOTION_SETUP.md:
- Create integration at notion.so/my-integrations
- Copy the integration token (NOTION_API_KEY)
- Get your database ID from the URL (32-character string)
- Share the database with your integration
3. Linear Setup
- Go to linear.app/settings/api
- Create a personal API key
- Copy the key (LINEAR_API_KEY)
Configuration
Environment Variables
Set the following environment variables:
export NOTION_API_KEY="your_notion_integration_token"
export NOTION_DATABASE_ID="your_32_char_database_id"
export LINEAR_API_KEY="your_linear_api_key"
For Development
Add to your shell profile (.bashrc, .zshrc, etc.):
# Notion
export NOTION_API_KEY="secret_..."
export NOTION_DATABASE_ID="abc123..."
# Linear
export LINEAR_API_KEY="lin_api_..."
Available Tools
Notion Tools
| Tool | Description | Parameters |
|---|---|---|
notion_query_database |
Query Notion database with filters | database_id, filter |
notion_create_page |
Create new page in Notion | parent_id, properties, content |
notion_update_page |
Update existing page | page_id, properties |
notion_get_page |
Get page content | page_id |
Linear Tools
| Tool | Description | Parameters |
|---|---|---|
linear_query_issues |
Query issues from Linear | team_key, status |
linear_create_issue |
Create new issue | team_id, title, description |
linear_update_issue_state |
Update issue state | issue_id, state_id |
System Tools
| Tool | Description | Parameters |
|---|---|---|
check_credentials |
Check configured credentials | none |
sync_research_to_notion |
Sync Research Stack papers to Notion | paper_path |
Usage
Running the MCP Server
python mcp_notion_linear.py
Claude Code Configuration
Add to your Claude Code MCP configuration:
{
"mcpServers": {
"notion-linear": {
"command": "python",
"args": ["/home/allaun/Documents/Research Stack/mcp_notion_linear.py"],
"env": {
"NOTION_API_KEY": "your_key",
"NOTION_DATABASE_ID": "your_db_id",
"LINEAR_API_KEY": "your_key"
}
}
}
}
Example Workflows
1. Sync Paper to Notion
Tool: sync_research_to_notion
Parameters: {
"paper_path": "/home/allaun/Documents/Research Stack/docs/papers/LATTICE_POST_QUANTUM_CRINGE_DEFENSE_2026-04-25.md"
}
2. Create Linear Issue from Research
Tool: linear_create_issue
Parameters: {
"team_id": "TEAM_ID",
"title": "Implement AngrySphinx in production",
"description": "Based on lattice-based post-quantum cryptography research..."
}
3. Query Notion Database
Tool: notion_query_database
Parameters: {
"database_id": "abc123...",
"filter": {
"property": "Status",
"select": {
"equals": "In Progress"
}
}
}
ENE Integration (Planned)
Future versions will integrate with ENE (Endless Node Edges) for:
- AES-256-GCM encryption of API credentials
- Shamir-secret sharing (6 shards, 2/3 threshold)
- Health-weighted routing across 6-node mesh
- Consensus-based credential rotation
This will eliminate plaintext credentials from environment variables.
Security Notes
- Never commit API keys to git
- Use ENE for production - environment variables only for development
- Rotate keys regularly via Linear/Notion settings
- Audit access logs in Notion/Linear dashboards
- Monitor ENE node health via
get_ene_statustool - Credentials are AES-256-GCM encrypted when stored in ENE
- Shamir-secret sharing ensures no single point of failure
Troubleshooting
"Notion credentials not configured"
- Check ENE status via
get_ene_status - If ENE disabled, check that
NOTION_API_KEYis set - Verify database is shared with integration (see NOTION_SETUP.md)
"Linear credentials not configured"
- Check ENE status via
get_ene_status - If ENE disabled, check that
LINEAR_API_KEYis set - Verify key has necessary permissions
"ENE initialization failed"
- Check that
infra/ene_cloud_credential_manager.pyexists - Verify ENE databases are accessible
- Check that
ene_apimodule is available - Falls back to environment variables automatically
"No browsers available"
- The web interaction surface uses a browser pool
- Check SwarmWebSurface health via
health()method - Default: min 2, max 20 browsers
Development Notes
Per AGENTS.md, this is a shim layer:
- All core logic resides in Lean modules
- This file handles external API integration only
- No invariant checks or cost functions in this layer
- Credentials managed via ENE (planned)
File Locations
- MCP Server:
mcp_notion_linear.py - Web Surface:
infra/web_interaction_surface.py - Notion Setup:
docs/NOTION_SETUP.md - Example MCP:
mcp_server.py(swarm integration)
Status
✅ Notion API integration
✅ Linear API integration
✅ Web surface integration
✅ ENE credential management (implemented)
✅ AES-256-GCM encryption
✅ Health-weighted node routing
✅ Shamir-secret sharing (6 shards)
✅ Environment variable fallback
⏳ Production deployment (pending)