Buttondown MCP Server

by The-Focus-AI
Verified
# Buttondown API Integration A comprehensive TypeScript integration for the Buttondown newsletter service, providing both a CLI interface and a Model Context Protocol (MCP) server for managing newsletters, drafts, and analytics. ## Features - **Multiple Interfaces**: - Command Line Interface (CLI) for direct interaction - Model Context Protocol (MCP) server for AI/LLM integration - Programmatic TypeScript API for custom integrations - **Core Functionality**: - Email draft management (create, update, delete) - Email scheduling system - Analytics retrieval and formatting - List management - Tag management - **Security**: - 1Password integration for API key management - Environment variable support - Secure credential handling - **Developer Experience**: - Full TypeScript support - Comprehensive type definitions - Real API response-based types - Built-in testing utilities ## Installation ```bash # Install using pnpm (recommended) pnpm install # Or using npm npm install # Or using yarn yarn install ``` ## Configuration The API key can be provided in two ways: 1. Environment variable: ```bash export BUTTONDOWN_API_KEY=your_api_key ``` 2. 1Password CLI (recommended): - Store your API key in 1Password at `op://Development/Buttondown API/notesPlain` - The integration will automatically fetch it when needed ## Usage ### CLI Interface ```bash # List all emails buttondown emails list # Create a new draft buttondown draft create <file> # Schedule an email buttondown schedule set <draft-id> <relative-time> # Get analytics buttondown analytics get <draft-id> ``` ### MCP Server 1. Start the server: ```bash pnpm mcp:start ``` 2. Start with inspector (for development): ```bash pnpm mcp:inspect ``` Available MCP tools: - `list_emails`: List all emails with optional status filtering ```json { "status": "draft" // Optional: "draft", "scheduled", "sent" } ``` - `create_draft`: Create a new email draft ```json { "content": "Email content in markdown", "title": "Optional email subject" } ``` - `get_analytics`: Get analytics for a specific email ```json { "draftId": "email-id-here" } ``` - `schedule_draft`: Schedule an email for sending ```json { "draftId": "email-id-here", "scheduledTime": "2024-03-27T10:00:00Z" } ``` ### Programmatic Usage ```typescript import { ButtondownAPI } from "api-integrator"; // Initialize the client const api = new ButtondownAPI(); // Will use 1Password or env var // List drafts const drafts = await api.getDrafts(); // Create a draft const draft = await api.createEmail({ subject: "My Newsletter", body: "Content here", status: "draft", }); // Schedule an email const scheduled = await api.scheduleEmail(draft.id, "2024-03-27T10:00:00Z"); // Get analytics const analytics = await api.getEmailStats(draft.id); ``` ## Development ```bash # Build the project pnpm build # Run tests pnpm test # Start MCP server in development mode pnpm mcp:inspect # Build MCP server pnpm mcp:build ``` ## Testing The project includes several types of tests: - Unit tests for core functionality - Integration tests for API interactions - CLI command tests - MCP server tests Run tests with: ```bash pnpm test ``` ## Project Structure ``` . ├── src/ │ ├── api/ # Core API client │ ├── cli/ # CLI implementation │ ├── mcp/ # MCP server │ ├── types/ # TypeScript definitions │ └── utils/ # Shared utilities ├── tests/ # Test files ├── api-responses/ # Cached API responses └── memory-bank/ # Project documentation ``` ## Contributing 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License ISC License - See [LICENSE](LICENSE) for details ## Acknowledgments - [Buttondown](https://buttondown.email/) for their excellent newsletter service - [Model Context Protocol](https://github.com/cursor-ai/model-context-protocol) for the AI integration framework