A CLI tool to fetch Basecamp todos and convert them to LLM-friendly task formats like Codex tasks.
- π OAuth2 authentication with Basecamp
- π Fetch todos from Basecamp projects
- π― Filter by specific kanban boards and columns
- π Export to JSON and Markdown formats
- π Easy-to-use CLI interface
- π Automatic token refresh
- π€ MCP (Model Context Protocol) server for Codex/Cursor integration
npm install -g @aexol-studio/basecamp-to-llm
Or use it directly with npx:
npx @aexol-studio/basecamp-to-llm --help
- Go to Basecamp Admin
- Create a new integration
- Set the redirect URI to
http://localhost:8787/callback
(or your preferred local URL) - Note down your
client_id
andclient_secret
Create a .env
file or set these environment variables:
export BASECAMP_CLIENT_ID="your_client_id"
export BASECAMP_CLIENT_SECRET="your_client_secret"
export BASECAMP_REDIRECT_URI="http://localhost:8787/callback"
export BASECAMP_USER_AGENT="Your App Name ([email protected])"
Required:
BASECAMP_CLIENT_ID
: Your OAuth2 client ID from BasecampBASECAMP_CLIENT_SECRET
: Your OAuth2 client secret from BasecampBASECAMP_REDIRECT_URI
: Must match your app config (e.g.,http://localhost:8787/callback
)BASECAMP_USER_AGENT
: Required by Basecamp API (e.g.,"My App ([email protected])"
)
Optional:
BASECAMP_ACCOUNT_ID
: Force a specific account ID (otherwise auto-detected)
First, authenticate with Basecamp:
basecamp-to-llm auth --open
This will open your browser for OAuth authorization and cache the token locally.
basecamp-to-llm projects
# Basic usage
basecamp-to-llm fetch "My Project Name"
# With specific kanban board
basecamp-to-llm fetch "My Project Name" --table "Sprint Board"
# With specific column
basecamp-to-llm fetch "My Project Name" --column "In Progress"
# Custom output path
basecamp-to-llm fetch "My Project Name" --out ./my-tasks.json
# Open browser for re-authentication if needed
basecamp-to-llm fetch "My Project Name" --open
This package includes an MCP server that allows you to use Basecamp functionality directly within Codex and Cursor.
-
Install as dev dependency:
npm install --save-dev @aexol-studio/basecamp-to-llm
-
Run setup script:
npx @aexol-studio/basecamp-to-llm setup-mcp
Or manually copy configuration:
# For Codex (TOML) cp node_modules/@aexol-studio/basecamp-to-llm/configs/codex.toml .codex/config.toml # For Cursor cp node_modules/@aexol-studio/basecamp-to-llm/configs/cursor.json .cursor/config.json
-
Set environment variables (see Setup section above)
-
Restart your IDE
list_projects
- List all Basecamp projectsfetch_todos
- Fetch todos from a projectauthenticate
- Authenticate with Basecampget_project_info
- Get project details
Once configured, you can use natural language in your IDE:
"Can you list my Basecamp projects?"
"Fetch todos from my Sprint Project"
"I need to authenticate with Basecamp"
For detailed MCP setup instructions, see MCP_SETUP.md.
The tool creates two files in the .codex/
directory (or your specified output path):
tasks.json
- JSON format for Codex CLItasks.md
- Human-readable Markdown format
Example tasks.json
:
{
"plan": [
{
"step": "Implement user authentication",
"status": "pending"
},
{
"step": "Add payment processing",
"status": "pending"
}
]
}
Example tasks.md
:
# Codex Tasks from Basecamp: My Project
- [ ] Implement user authentication
- [ ] Add payment processing
You can also use the library programmatically:
import { BasecampFetcher } from '@aexol-studio/basecamp-to-llm';
const fetcher = new BasecampFetcher();
// List projects
const projects = await fetcher.listProjects();
console.log('Available projects:', projects);
// Fetch todos
await fetcher.fetchTodos('My Project Name', {
tableName: 'Sprint Board',
columnName: 'In Progress',
outputPath: './custom-output.json',
openBrowser: false,
});
- Node.js 18+
- npm or yarn
# Clone the repository
git clone https://github.com/aexol-studio/basecamp-to-llm.git
cd basecamp-to-llm
# Install dependencies
npm install
# Set up environment variables (see Setup section above)
# Build the project
npm run build
# Development mode with watch
npm run dev
# Lint code
npm run lint
npm run lint:fix
# Format code
npm run format
npm run format:check
# Run tests
npm test
npm run test:watch
# Clean build artifacts
npm run clean
src/
βββ cli.ts # CLI entry point
βββ index.ts # Main exports
βββ basecamp-fetcher.ts # Core functionality
βββ basecamp-types.ts # TypeScript type definitions
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions, please open an issue on GitHub.
- Initial release
- OAuth2 authentication
- Fetch todos from Basecamp projects
- Export to JSON and Markdown formats
- CLI interface with Commander.js