Basecamp MCP Integration
This project provides a MCP (Magic Copy Paste) integration for Basecamp 3, allowing Cursor to interact with Basecamp directly through the MCP protocol.
Architecture
The project consists of the following components:
- OAuth App (
oauth_app.py
) - A Flask application that handles the OAuth 2.0 flow with Basecamp.
- Token Storage (
token_storage.py
) - A module for securely storing OAuth tokens.
- MCP Server (
mcp_server.py
) - A Flask server that implements the MCP protocol for Basecamp.
- Basecamp Client (
basecamp_client.py
) - A client library for interacting with the Basecamp API.
- Basecamp OAuth (
basecamp_oauth.py
) - A utility for handling OAuth authentication with Basecamp.
- Search Utilities (
search_utils.py
) - Utilities for searching Basecamp resources.
Setup
Prerequisites
Installation
Clone this repository:
git clone
cd basecamp-mcp
Create and activate a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
Install dependencies:
pip install -r requirements.txt
Create a .env
file with the following variables:
BASECAMP_CLIENT_ID=your_client_id
BASECAMP_CLIENT_SECRET=your_client_secret
BASECAMP_REDIRECT_URI=http://localhost:8000/auth/callback
USER_AGENT="Your App Name ([[email protected]](/cdn-cgi/l/email-protection))"
BASECAMP_ACCOUNT_ID=your_account_id
FLASK_SECRET_KEY=random_secret_key
MCP_API_KEY=your_api_key
COMPOSIO_API_KEY=your_composio_api_key
Usage
Starting the Servers
Start the OAuth app:
python oauth_app.py
Start the MCP server:
python mcp_server.py
OAuth Authentication
- Visit http://localhost:8000/ in your browser
- Click "Log in with Basecamp"
- Follow the OAuth flow to authorize the application
- The token will be stored securely in the token storage
Using with Cursor
- In Cursor, add the MCP server URL: http://localhost:5001
- Interact with Basecamp through the Cursor interface
- The MCP server will use the stored OAuth token to authenticate with Basecamp
Authentication Flow
When using the MCP server with Cursor, the authentication flow is as follows:
- Cursor makes a request to the MCP server
- The MCP server checks if OAuth authentication has been completed
- If not, it returns an error with instructions to authenticate
- You authenticate using the OAuth app at http://localhost:8000/
- After authentication, Cursor can make requests to the MCP server
MCP Server API
The MCP server has two main methods for interacting with Basecamp:
Preferred Method: Connection-based Approach
This approach is recommended as it provides better error handling and state management:
Initiate a connection:
POST /initiate_connection
{
"auth_mode": "oauth"
}
Use the returned connection ID to make tool calls:
POST /tool/
{
"action": "get_projects"
}
If OAuth authentication hasn't been completed, the MCP server will return an error with instructions to authenticate.
Alternative Method: Direct Action
For simple requests, you can use the action endpoint:
POST /mcp/action
{
"action": "get_projects"
}
This method also checks for OAuth authentication and returns appropriate error messages if needed.
Token Management
Troubleshooting
- Token Issues : If you encounter authentication errors, try logging out and logging in again through the OAuth app
- MCP Connection Issues : Make sure both the OAuth app and MCP server are running
- API Errors : Check the logs in
oauth_app.log
and mcp_server.log
for detailed error messages
Security Considerations
- This implementation uses file-based token storage, which is suitable for development but not for production
- In a production environment, use a database or secure key management service for token storage
- Always use HTTPS in production and implement proper authentication for the API endpoints
License
This project is licensed under the MIT License - see the LICENSE file for details.
Recent Changes
March 9, 2024 - Improved MCP Server Functionality
- Added standardized error and success response handling with new
mcp_response
helper function
- Fixed API endpoint issues for Basecamp Campfire (chat) functionality:
- Updated the URL format for retrieving campfires from
projects/{project_id}/campfire.json
to buckets/{project_id}/chats.json
- Added support for retrieving campfire chat lines
- Enhanced search capabilities to include campfire lines content
- Improved error handling and response formatting across all action handlers
- Fixed CORS support by adding the Flask-CORS package
These changes ensure more reliable and consistent responses from the MCP server, particularly for Campfire chat functionality.
March 9, 2024 - Added Composio Integration
Added support for Composio integration, allowing the Basecamp MCP server to be used with Composio for AI-powered workflows. This integration follows the Model Context Protocol (MCP) standards and includes:
New endpoints for Composio compatibility:
/composio/schema
- Returns the schema of available tools in Composio-compatible format
/composio/tool
- Handles Composio tool calls with standardized parameters
/composio/check_auth
- Checks authentication status for Composio requests
Standardized tool naming and parameter formats to work with Composio's MCP specifications
A standalone example client for testing and demonstrating the integration
Using with Composio
Prerequisites
Create a Composio account at https://app.composio.dev
Obtain a Composio API key from your Composio dashboard
Add your API key to your .env
file:
COMPOSIO_API_KEY=your_composio_api_key
Setting Up Composio Integration
Make sure you have authenticated with Basecamp using the OAuth app (http://localhost:8000/)
Run the MCP server with the Composio integration enabled:
python mcp_server.py
In your Composio dashboard, add a new custom integration:
* Integration URL: `http://localhost:5001/composio/schema`
* Authentication: OAuth (managed by our implementation)
- You can now use Composio to connect to your Basecamp account through the MCP server:
* Composio will discover available tools via the schema endpoint
* Tool executions will be handled by the `/composio/tool` endpoint
* Authentication status is checked via the `/composio/check_auth` endpoint
Example Composio Client
We provide a simple client example in composio_client_example.py
that demonstrates how to:
- Check authentication status
- Retrieve the tool schema
- Execute various Basecamp operations through the Composio integration
Run the example with:
python composio_client_example.py
Testing the Integration
To test the integration without connecting to Composio:
Run the MCP server:
python mcp_server.py
Use curl to test the endpoints directly:
Check authentication status
curl http://localhost:5001/composio/check_auth
# Get the schema
curl http://localhost:5001/composio/schema
# Execute a tool (get projects)
curl -X POST http://localhost:5001/composio/tool \
-H "Content-Type: application/json" \
-d '{"tool": "GET_PROJECTS", "params": {}}'
For more detailed documentation on Composio integration, refer to the official Composio documentation.