63 Commits

Author SHA1 Message Date
m3tm3re
503e97e520 fix: resolve read-only file system issues for Nix packaging
- Add config_paths.py for XDG-compliant path resolution
- Update all servers to use user-writable locations (logs, tokens, .env)
- Make .env file optional - server works with environment variables only
- Default paths: ~/.local/share for data, ~/.local/state for logs
- Update Nix wrapper with XDG defaults and helpful postInstall message
- Update README.md with environment variable configuration documentation

Fixes OSError when running in Nix store (read-only filesystem)
v0.1.1
2026-01-21 20:42:05 +01:00
m3tm3re
a81ea23782 feat: add BASECAMP_TOKEN_FILE env var for configurable token storage v0.1.0 2026-01-21 19:20:43 +01:00
George Antonopoulos
060f3cca07 updated docs on dependencies 2026-01-14 20:07:17 +00:00
George Antonopoulos
6c1eeec2d5 Tidying up codebase 2026-01-14 19:50:44 +00:00
George Antonopoulos
843a2acc74 Merge pull request #15 from mamedov/feature/comments-pagination
Add pagination support to get_comments
2026-01-14 19:42:41 +00:00
George Antonopoulos
feb0d297f4 Make Link header parsing more robust
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>
2026-01-14 19:39:52 +00:00
George Antonopoulos
ad6075629e Add pagination support to search_comments
- 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>
2026-01-14 19:36:45 +00:00
George Antonopoulos
43aa595433 Fix review issues in pagination implementation
- 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>
2026-01-14 19:34:51 +00:00
George Antonopoulos
9b5a5da803 Claude MD 2026-01-14 19:30:19 +00:00
Mammad M.
67d68af1da Add pagination support to get_comments
- 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>
2026-01-10 00:33:00 +01:00
George Antonopoulos
6265026f57 Auth manager added that automatically refreshes expired tokens 2026-01-08 21:14:19 +00:00
George Antonopoulos
2f1800e792 gitignore 2026-01-08 21:13:58 +00:00
George Antonopoulos
e91e0031b9 Add create_comment tool to Basecamp integration
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.
2025-09-11 20:50:06 +01:00
George Antonopoulos
c3c96712e6 Enhance get_todos method to handle pagination in BasecampClient
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.
2025-08-28 14:00:53 +01:00
George Antonopoulos
632a5769b0 Cleanup: remove stray ellipsis in update_todo exception handler 2025-08-27 13:14:02 +01:00
George Antonopoulos
d014e336ea Merge PR #11: Add todo tools to client, FastMCP, and CLI 2025-08-27 13:13:12 +01:00
Dominik Fretz
b7e0bac71a Fix conditional checks in todo payload builders to allow falsey values
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>
2025-08-27 10:11:57 +10:00
Dominik Fretz
c9ac202bcd Update mcp_server_cli.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-27 10:00:20 +10:00
Dominik Fretz
e22fa4783c Update mcp_server_cli.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-27 09:59:56 +10:00
Dominik Fretz
6eb134731b Update basecamp_fastmcp.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-27 09:59:40 +10:00
Dominik Fretz
5aeec24743 Update basecamp_client.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-27 09:59:19 +10:00
Dominik Fretz
e51b272bd4 Update mcp_server_cli.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-27 09:57:23 +10:00
Dominik Fretz
1266ecb921 Add todo item management functionality
- 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>
2025-08-20 14:42:55 +10:00
George Antonopoulos
0032498949 Add upload management features to Basecamp integration
- 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.
2025-07-30 10:22:42 +01:00
George Antonopoulos
5ea5e77429 Remove FASTMCP_MIGRATION.md document as part of the migration cleanup process. 2025-07-27 20:23:14 +01:00
George Antonopoulos
ee3f31fcd2 Add generate_claude_desktop_config.py for Claude Desktop integration
- 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.
2025-07-27 20:18:03 +01:00
George Antonopoulos
1cb7b4423b Remove Claude MCP integration instructions document 2025-07-27 20:09:01 +01:00
George Antonopoulos
aec5c3eebc Enhance README and add setup script for Basecamp MCP Integration
- 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
2025-07-27 20:07:25 +01:00
George Antonopoulos
4cfc865688 Update migration docs - 100% complete with all 46 tools migrated 2025-07-27 19:40:05 +01:00
George Antonopoulos
1c46017162 Complete FastMCP migration - ALL 46 tools migrated with 100% feature parity 2025-07-27 19:39:08 +01:00
George Antonopoulos
759207e2a3 Complete FastMCP migration documentation - all essential tools migrated successfully 2025-07-27 19:34:55 +01:00
George Antonopoulos
65c31a7393 🔧 Add dual-run configuration support for FastMCP migration
- 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
2025-07-27 19:33:01 +01:00
George Antonopoulos
d7e39019c8 🚀 MAJOR: Migrate to official FastMCP framework
- 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
2025-07-27 19:30:59 +01:00
George Antonopoulos
1d40341f28 Merge pull request #10 from georgeantonopoulos/codex/research-and-enhance-basecamp-api-functionality
Add more Basecamp API endpoints
2025-07-27 18:29:24 +01:00
George Antonopoulos
da041f9c5d Fix BasecampClient to include authentication in attachment uploads 2025-07-27 18:29:01 +01:00
George Antonopoulos
fc3a5b922a Add additional Basecamp API tools 2025-07-20 20:51:47 +01:00
George Antonopoulos
982757c309 Add reference/ directory to .gitignore 2025-06-29 08:41:45 +01:00
George Antonopoulos
6ee37ccfc2 Merge pull request #9 from georgeantonopoulos/feature/card-tables
Feature/card tables
2025-06-29 08:38:39 +01:00
George Antonopoulos
b740378a90 Update MCP server CLI and example script to include card_table_id in request handling
- 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.
2025-06-29 08:37:41 +01:00
George Antonopoulos
a439865ef4 Refactor card management in Basecamp client and MCP server CLI
- 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.
2025-06-29 08:22:09 +01:00
George Antonopoulos
4e466c20da Add card table functionality to Basecamp client and MCP server CLI
- 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.
2025-06-26 22:34:01 +01:00
George Antonopoulos
a00d887c4a Enhance token management by adding ensure_valid_token function to check and refresh tokens. Introduce warning message for expired tokens in token_info. Update home and get_token_api routes to utilize the new token validation logic. 2025-06-18 09:09:45 +01:00
George Antonopoulos
e9df8820b0 Merge pull request #7 from georgeantonopoulos/codex/add-missing-basecamp-api-functionality
Implement global search across Basecamp
2025-06-18 08:41:32 +01:00
George Antonopoulos
301cc0f961 Add global search tool 2025-06-18 08:17:55 +01:00
George Antonopoulos
0d64f6028c Merge remote-tracking branch 'origin/codex/cleanup-files--newline-and-trailing-spaces' 2025-06-06 10:39:25 +01:00
George Antonopoulos
bba8aa1cdc Merge branch 'feature/sse-mcp-cursor-compat' 2025-06-06 10:33:11 +01:00
George Antonopoulos
bd476540f8 Merge pull request #4 from iamanikeev/fix-basecamp-api-issues
Add daily check-ins functionality, fix some issues with getting todo lists/sets
2025-06-06 10:24:46 +01:00
George Antonopoulos
e9dc21e881 Merge pull request #5 from georgeantonopoulos/codex/add-license-file-with-mit-license
Add MIT license file
2025-06-06 10:24:23 +01:00
George Antonopoulos
0884dcd105 chore: remove trailing spaces and ensure newline 2025-06-06 10:23:50 +01:00
George Antonopoulos
52fd14c3af chore: add MIT license 2025-06-06 10:23:27 +01:00