A collection of FastMCP servers providing integrations with various tools used at Tecton.
- Chronosphere - Query Prometheus/PromQL metrics from Chronosphere
- Linear - Search issues, get issue details, and track project status
- Jira - Retrieve tickets, comments, and project information
- Slack - Search messages, get threads, and monitor channel activity
- Observe - Query and analyze log data using OPAL (Observe Processing and Analysis Language)
git clone <your-repo-url>
cd tecton-mcp-toolspip install -r requirements.txtCopy the example environment file and fill in your credentials:
cp .env.example .envEdit .env with your actual API keys and credentials (see Configuration below).
Add the servers to your Claude MCP configuration file (typically ~/.config/claude-desktop/config.json):
{
"mcp": {
"servers": {
"chronosphere": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/chronosphere_server.py"],
"env": {
"CHRONOSPHERE_DOMAIN": "tecton",
"CHRONOSPHERE_API_TOKEN": "your-token-here"
}
},
"linear": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/linear_server.py"],
"env": {
"LINEAR_API_KEY": "your-key-here"
}
},
"jira": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/jira_server.py"],
"env": {
"JIRA_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
},
"slack": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/slack_server.py"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-bot-token-here"
}
},
"observe": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/observe_server.py"],
"env": {
"OBSERVE_TENANT_URL": "https://your-tenant-id.observeinc.com",
"OBSERVE_USER_EMAIL": "your-email@example.com",
"OBSERVE_API_TOKEN": "your-observe-bearer-token"
}
}
}
}
}Alternatively, you can use the shared environment file approach by sourcing the .env file:
{
"mcp": {
"servers": {
"chronosphere": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/chronosphere_server.py"]
},
"linear": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/linear_server.py"]
},
"jira": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/jira_server.py"]
},
"slack": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/slack_server.py"]
},
"observe": {
"command": "python",
"args": ["/path/to/tecton-mcp-tools/servers/observe_server.py"]
}
}
}
}Create a .env file in the project root with the following variables:
# Chronosphere Configuration
CHRONOSPHERE_DOMAIN=tecton
CHRONOSPHERE_API_TOKEN=your-chronosphere-token
# Linear Configuration
LINEAR_API_KEY=your-linear-api-key
# Jira Configuration
JIRA_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=your-jira-api-token
# Slack Configuration
SLACK_BOT_TOKEN=xoxb-your-bot-token-here
# Observe Configuration
OBSERVE_TENANT_URL=https://your-tenant-id.observeinc.com
OBSERVE_USER_EMAIL=your-email@example.com
OBSERVE_API_TOKEN=your-observe-bearer-token- Log in to your Chronosphere instance
- Navigate to Settings → API Tokens
- Create a new API token with appropriate permissions
- Go to Linear Settings → API
- Create a new Personal API Key
- Copy the key (starts with
lin_api_)
- Go to Atlassian Account Settings → Security → API tokens
- Create a new API token
- Use your Atlassian email and the generated token
- Go to api.slack.com → Your Apps
- Create a new app or use existing
- Navigate to OAuth & Permissions
- Add the following Bot Token Scopes:
channels:historychannels:readgroups:historygroups:readim:historyim:readmpim:historympim:readsearch:read
- Install the app to your workspace
- Copy the Bot User OAuth Token (starts with
xoxb-)
- Contact your IT/DevOps team or check with your Observe administrator
- Use the delegated login API to get a bearer token:
curl -d '{"userEmail":"your-email@company.com", "integration":"observe-tool-mcp","clientToken":"MCP setup"}' https://your-tenant-id.observeinc.com/v1/login/delegated - Copy the
serverTokenfrom the response and use it asOBSERVE_API_TOKEN - Set
OBSERVE_TENANT_URLto your Observe tenant URL (e.g.,https://168585119059.observeinc.com) - Set
OBSERVE_USER_EMAILto your email address
- File:
servers/chronosphere_server.py - Purpose: Query Prometheus/PromQL metrics from Chronosphere
- Key Tools:
list_clusters()- List all available Tecton clustersquery_metrics()- Execute PromQL queries with time rangesinstant_query_metrics()- Get current metric valuesget_dynamodb_latency()- Specific DynamoDB latency metricsdiscover_metrics()- Find available metrics by pattern
- File:
servers/linear_server.py - Purpose: Interact with Linear for issue tracking and project management
- Key Tools:
linear_health_check()- Test connection and get user infolinear_search_issues()- Search issues by various criterialinear_get_issue_details()- Get detailed issue informationlinear_get_issue_by_identifier()- Get issue by ID (e.g., ENG-123)
- File:
servers/jira_server.py - Purpose: Retrieve Jira tickets and related information
- Key Tools:
jira_health_check()- Test Jira connectionget_jira_ticket()- Get ticket details by keyget_jira_ticket_comments()- Get ticket comments
- File:
servers/slack_server.py - Purpose: Search and monitor Slack activity
- Key Tools:
slack_health_check()- Test Slack connectionsearch_slack_messages()- Search messages across channelsget_slack_thread()- Get thread details by permalinkget_recent_channel_activity()- Monitor channel activitylist_slack_channels()- List accessible channels
- File:
servers/observe_server.py - Purpose: Query and analyze log data using OPAL (Observe Processing and Analysis Language)
- Key Tools:
observe_health_check()- Test Observe API connectionobserve_query_logs()- Flexible log querying with filtering and extractionobserve_raw_query()- Execute raw OPAL queries for advanced usersobserve_search_errors()- Convenience function to search for error logsobserve_search_http_errors()- Search for HTTP errors (non-200 status codes)
Each server can be tested individually:
# Test Chronosphere
python servers/chronosphere_server.py
# Test Linear
python servers/linear_server.py
# Test Jira
python servers/jira_server.py
# Test Slack
python servers/slack_server.py
# Test Observe
python servers/observe_server.pytecton-mcp-tools/
├── README.md
├── requirements.txt
├── .env.example
├── .env (create from .env.example)
├── .gitignore
└── servers/
├── chronosphere_server.py
├── linear_server.py
├── jira_server.py
├── slack_server.py
└── observe_server.py
- Never commit your
.envfile to version control - Use environment-specific API tokens (dev vs prod)
- Regularly rotate API tokens
- Ensure proper scopes/permissions for each integration
- Create a feature branch
- Make your changes
- Test the affected servers
- Submit a pull request
[Add your license here]
-
"Environment variable not set" errors
- Ensure your
.envfile is properly configured - Check that the server can access environment variables
- Ensure your
-
Authentication failures
- Verify API tokens are correct and not expired
- Check that tokens have necessary permissions
-
Connection timeouts
- Check network connectivity
- Verify service URLs are correct
- Check the individual server files for specific error handling
- Review API documentation for each service
- Test servers individually before using with Claude
Built with ❤️ for the Tecton team using FastMCP