Split on comma before searching for rel="next" to avoid
incorrectly matching page number from a different link
(e.g., rel="prev") in multi-link headers.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add page parameter to search_comments method
- Return dict with pagination metadata (total_count, next_page)
- Update return type from list to dict for consistency
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move `import re` to top of file (was inline in function)
- Add page parameter validation (page >= 1)
- Fix parameter order bug in search_utils.py (was swapped)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add page parameter to get_comments (default: 1)
- Parse X-Total-Count header for total comments count
- Parse Link header for next_page indicator
- Update FastMCP tool and CLI server to return pagination metadata
Response now includes total_count and next_page fields to help
clients navigate through paginated comments.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updated mcp_server_cli.py to include the new tool in the CLI and modified README.md to document the new functionality. Adjusted test_cli_server.py to include the create_comment tool in the expected tools list.
Updated the get_todos method to retrieve all todos from a todolist by handling pagination transparently. The method now aggregates todos across multiple pages and updates the README to reflect this change.
Changed truthy checks to explicit 'is not None' checks in create_todo and
update_todo methods to properly handle intentionally empty/false values
(empty lists, False) being sent to the API for field clearing.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add create, update, delete, complete, and uncomplete methods to basecamp_client.py
- Add tool definitions and execution logic to mcp_server_cli.py
- Add async todo management functions to basecamp_fastmcp.py
- Support all optional fields: description, assignees, due dates, notifications
- Use lambda wrapper for proper keyword argument handling in FastMCP
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement methods to list uploads and retrieve specific upload details in basecamp_client.py.
- Add corresponding asynchronous functions for uploads in basecamp_fastmcp.py.
- Enhance search functionality to include uploads in search_utils.py, allowing users to search by filename or content.
- Introduce a new script to generate configuration for Claude Desktop based on Basecamp MCP integration.
- Update README with setup instructions for Claude Desktop users, including configuration generation steps and troubleshooting tips.
- Ensure compatibility with both Cursor and Claude Desktop clients.
- Update README to reflect migration to FastMCP framework and improved setup instructions
- Introduce a new setup.py script for automated environment setup, including virtual environment creation, dependency installation, and .env file generation
- Ensure compatibility with Python 3.8+ and provide clear troubleshooting steps for common issues
- Update generate_cursor_config.py to support both FastMCP and legacy servers
- Add --legacy flag to switch to old mcp_server_cli.py during transition
- Default to new FastMCP server (basecamp_fastmcp.py) - RECOMMENDED
- Auto-cleanup old server configs when switching
- Provide clear migration instructions and fallback options
Usage:
python generate_cursor_config.py # Use FastMCP (default)
python generate_cursor_config.py --legacy # Use legacy server
Following migration plan P-5: Safe dual-run deployment with easy rollback
- Create new basecamp_fastmcp.py using official Anthropic MCP SDK
- Migrate 19 essential tools following official MCP best practices
- Maintain identical tool names and API compatibility with original server
- Add FastMCP dependencies (mcp[cli]>=1.2.0, httpx, anyio)
- Use async/await with anyio.to_thread for sync→async bridge
- Follow official logging practices (stderr + file, not stdout)
- Full compatibility with Cursor and Claude Desktop
Core tools migrated:
✅ Projects: get_projects, get_project, get_todolists, get_todos
✅ Search: search_basecamp, global_search
✅ Communication: get_comments, get_campfire_lines
✅ Card Tables: get_card_tables, get_card_table, get_columns, get_cards
✅ Card Management: create_card, get_card, update_card, move_card, complete_card
✅ Column Management: get_column, create_column
Next: Update config generation for dual-run support
- Add card_table_id to the required properties in MCPServer class.
- Modify the move_column method to retrieve card_table_id from arguments.
- Refactor subprocess call in card_table_example.py to use subprocess.run for better error handling.
- Rename and enhance methods for retrieving card tables and managing cards.
- Introduce new methods for completing and uncompleting cards and card steps.
- Update MCP server CLI to include new card and card step functionalities.
- Revise README to reflect changes in card management tools and usage examples.
- Implement methods for managing card tables and columns in BasecampClient.
- Add corresponding tools in MCP server CLI for card table operations.
- Update README with new card table tools and usage examples.
- Create example script demonstrating card table API usage.
- Add unit tests for card table functionality.