Secure MCP server for WorkBoard OKR and strategy execution platform
Project description
MCP WorkBoard CrunchTools
A secure MCP (Model Context Protocol) server for WorkBoard OKR and strategy execution platform.
Overview
This MCP server is designed to be:
- Secure by default - Comprehensive threat modeling, input validation, and token protection
- No third-party services - Runs locally via stdio, your API token never leaves your machine
- Cross-platform - Works on Linux, macOS, and Windows
- Automatically updated - GitHub Actions monitor for CVEs and update dependencies
- Containerized - Available at
quay.io/crunchtools/mcp-workboardbuilt on Hummingbird Python base image
Naming Convention
| Component | Name |
|---|---|
| GitHub repo | crunchtools/mcp-workboard |
| Container | quay.io/crunchtools/mcp-workboard |
| Python package (PyPI) | mcp-workboard-crunchtools |
| CLI command | mcp-workboard-crunchtools |
| Module import | mcp_workboard_crunchtools |
Why Hummingbird?
The container image is built on the Hummingbird Python base image from Project Hummingbird, which provides:
- Minimal CVE exposure - Built with a minimal package set, dramatically reducing attack surface
- Regular updates - Security patches applied promptly
- Optimized for Python - Pre-configured with uv package manager
- Production-ready - Proper signal handling and non-root user defaults
Features
User Management (4 tools)
workboard_get_user- Get a user by ID or the current authenticated userworkboard_list_users- List all users (Data-Admin role required)workboard_create_user- Create a new user (Data-Admin role required)workboard_update_user- Update an existing user
Objective Management (4 tools)
workboard_get_objectives- Get objectives associated with a user (API capped at 15)workboard_get_objective_details- Get details for a specific objective with key resultsworkboard_get_my_objectives- Get the current user's owned objectives by ID (recommended)workboard_create_objective- Create a new objective with key results (Data-Admin required)
Key Result Management (2 tools)
workboard_get_my_key_results- List current user's key results with metric IDs and progressworkboard_update_key_result- Update key result progress for weekly OKR check-ins
Installation
With uvx (Recommended)
uvx mcp-workboard-crunchtools
With pip
pip install mcp-workboard-crunchtools
With Container
podman run -e WORKBOARD_API_TOKEN=your_token \
quay.io/crunchtools/mcp-workboard
Configuration
Getting a WorkBoard API Token
- Log in to your WorkBoard instance
- Navigate to Admin Settings > API Configuration
- Generate a JWT API token
- Copy the token immediately - store it securely
Add to Claude Code
claude mcp add mcp-workboard \
--env WORKBOARD_API_TOKEN=your_token_here \
-- uvx mcp-workboard-crunchtools
Or for the container version:
claude mcp add mcp-workboard \
--env WORKBOARD_API_TOKEN=your_token_here \
-- podman run -i --rm -e WORKBOARD_API_TOKEN quay.io/crunchtools/mcp-workboard
Usage Examples
Get Current User
User: Who am I in WorkBoard?
Assistant: [calls workboard_get_user with no args]
List All Users
User: List all WorkBoard users
Assistant: [calls workboard_list_users]
Get User Objectives
User: Show me objectives for user 12345
Assistant: [calls workboard_get_objectives with user_id=12345]
Get Objective Details
User: Get details on objective 67890 for user 12345
Assistant: [calls workboard_get_objective_details with user_id=12345, objective_id=67890]
Get My Objectives
User: Show me my objectives (IDs: 2900058, 2900075, 2901770)
Assistant: [calls workboard_get_my_objectives with objective_ids=[2900058, 2900075, 2901770]]
List My Key Results
User: Show me my key results
Assistant: [calls workboard_get_my_key_results]
Update Key Result Progress
User: Update key result 12345 to 75
Assistant: [calls workboard_update_key_result with metric_id=12345, value="75"]
Create an Objective
User: Create an objective called "Increase retention" owned by user@example.com
Assistant: [calls workboard_create_objective with name, owner, dates, and optional key_results]
Security
This server was designed with security as a primary concern. See SECURITY.md for:
- Threat model and attack vectors
- Defense in depth architecture
- Token handling best practices
- Input validation rules
Key Security Features
-
Token Protection
- Stored as SecretStr (never accidentally logged)
- Environment variable only (never in files or args)
- Sanitized from all error messages
-
Input Validation
- Pydantic models for all inputs
- Positive integer validation for IDs
- Email validation for user creation
-
API Hardening
- Hardcoded API base URL (prevents SSRF)
- TLS certificate validation
- Request timeouts
- Response size limits
-
Automated CVE Scanning
- GitHub Actions scan dependencies weekly
- Automatic issues for security updates
- Dependabot alerts enabled
Development
Setup
git clone https://github.com/crunchtools/mcp-workboard.git
cd mcp-workboard
uv sync
Run Tests
uv run pytest
Lint and Type Check
uv run ruff check src tests
uv run mypy src
Build Container
podman build -t mcp-workboard .
License
AGPL-3.0-or-later
Contributing
Contributions welcome! Please read SECURITY.md before submitting security-related changes.
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_workboard_crunchtools-0.6.1.tar.gz.
File metadata
- Download URL: mcp_workboard_crunchtools-0.6.1.tar.gz
- Upload date:
- Size: 46.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70d5a64a1a873c08011696afe5b9bda0614f0af2fa4d1cd37a4283dada714ceb
|
|
| MD5 |
dd2f8e838736344bef840125e208da05
|
|
| BLAKE2b-256 |
256bc14792a26fa8f9df4cc23ee9ce2a0000b87038e541a71b93d1fe3fca2888
|
Provenance
The following attestation bundles were made for mcp_workboard_crunchtools-0.6.1.tar.gz:
Publisher:
publish.yml on crunchtools/mcp-workboard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_workboard_crunchtools-0.6.1.tar.gz -
Subject digest:
70d5a64a1a873c08011696afe5b9bda0614f0af2fa4d1cd37a4283dada714ceb - Sigstore transparency entry: 1008249483
- Sigstore integration time:
-
Permalink:
crunchtools/mcp-workboard@76e7035dd54115ad393ee298782df50bdfbfb2fb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/crunchtools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@76e7035dd54115ad393ee298782df50bdfbfb2fb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mcp_workboard_crunchtools-0.6.1-py3-none-any.whl.
File metadata
- Download URL: mcp_workboard_crunchtools-0.6.1-py3-none-any.whl
- Upload date:
- Size: 32.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f191a6ce3d9d22ce67a85fc1d13abf402ae61ba99c6425bb269ef4f02cfaea51
|
|
| MD5 |
9eb4fb17ce4594912968e3e1ba6af9b2
|
|
| BLAKE2b-256 |
375ecf4e78d5e42570a8680233c5450e4348110380521bea1434238824cdee2f
|
Provenance
The following attestation bundles were made for mcp_workboard_crunchtools-0.6.1-py3-none-any.whl:
Publisher:
publish.yml on crunchtools/mcp-workboard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_workboard_crunchtools-0.6.1-py3-none-any.whl -
Subject digest:
f191a6ce3d9d22ce67a85fc1d13abf402ae61ba99c6425bb269ef4f02cfaea51 - Sigstore transparency entry: 1008249487
- Sigstore integration time:
-
Permalink:
crunchtools/mcp-workboard@76e7035dd54115ad393ee298782df50bdfbfb2fb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/crunchtools
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@76e7035dd54115ad393ee298782df50bdfbfb2fb -
Trigger Event:
workflow_dispatch
-
Statement type: