Skip to main content
Glama

Daraja MCP

by jameskanyiri
README.md9.52 kB
# Daraja MCP > 🚨 **Important Notice: Repository Moved** > > This project has moved to a new repository. If you're looking to contribute or access the latest version, please visit: > > [https://github.com/paylinkmcp/paylink](https://github.com/paylinkmcp/paylink) A Model Context Protocol (MCP) server designed to integrate AI applications with Safaricom's Daraja API, enabling seamless interaction with M-Pesa services. > ⚠️ **Warning: Not Production Ready** > > This project is currently in development and is not recommended for production use. It's designed for: > > - Learning and experimentation > - Development and testing environments > - Proof of concept implementations > > For production use, please ensure: > > - Thorough security testing > - Proper error handling > - Complete implementation of all planned features > - Compliance with Safaricom's production requirements ## What is an MCP Server? MCP (Model Context Protocol) servers provide capabilities for LLMs to interact with external systems. MCP servers can provide three main types of capabilities: - **Resources**: File-like data that can be read by clients (like API responses) - **Tools**: Functions that can be called by the LLM (with user approval) - **Prompts**: Pre-written templates that help users accomplish specific tasks Daraja MCP specifically leverages this architecture to connect AI systems with Safaricom's Daraja M-Pesa API. ## Overview Daraja MCP is a bridge between AI, fintech, and M-Pesa, making AI-driven financial automation accessible and efficient. By standardizing the connection between LLMs (Large Language Models) and financial transactions, Daraja MCP allows AI-driven applications to process payments, retrieve transaction data, and automate financial workflows effortlessly. ### Key Capabilities - ✅ **AI-Powered M-Pesa Transactions** – Enable LLMs to handle B2C, C2B, and B2B payments - ✅ **Standardized Integration** – MCP ensures compatibility with multiple AI tools - ✅ **Secure & Scalable** – Implements OAuth authentication and supports enterprise-grade transaction handling - ✅ **Flexible Automation** – AI agents can query account balances, generate invoices, and automate reconciliation ## Requirements - Python 3.12 - Safaricom Daraja API Credentials (Consumer Key and Secret) ## Installation ### Step 1: Setting Up Your Environment 1. **Install uv Package Manager** For Mac/Linux: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` For Windows (PowerShell): ```powershell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" ``` 2. **Clone the Repository** ```bash git clone https://github.com/jameskanyiri/DarajaMCP.git cd DarajaMCP ``` 3. **Create and Activate a Virtual Environment** ```bash uv venv source .venv/bin/activate # On Windows: .venv\Scripts\activate ``` ✅ Expected Output: Your terminal prompt should change, indicating the virtual environment is activated. 4. **Install Dependencies** ```bash uv sync ``` ### Step 2: Setting up Environment Variables 1. Copy the example environment file: ```bash cp .env.example .env ``` 2. Update the `.env` file with your actual credentials and configuration values. > Note: For development, use the sandbox environment. Switch to the production URL when ready. ## Usage ### Testing with Claude Desktop 1. **Install Claude Desktop** - Download and install the latest version from [Claude Desktop](https://claude.ai/desktop) - Make sure you're running the latest version 2. **Configure Claude Desktop** - Open your Claude Desktop configuration file: ```bash # On MacOS/Linux code ~/Library/Application\ Support/Claude/claude_desktop_config.json # On Windows code %APPDATA%\Claude\claude_desktop_config.json ``` - Create the file if it doesn't exist 3. **Add Server Configuration** Choose one of the following configurations: #### Anthropic's Recommended Format ```json { "mcpServers": { "daraja": { "command": "uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/DarajaMCP", "run", "main.py" ] } } } ``` #### Working Configuration (Tested) ```json { "mcpServers": { "DarajaMCP": { "command": "/ABSOLUTE/PATH/TO/PARENT/.local/bin/uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/DarajaMCP", "run", "main.py" ] } } } ``` > Note: > > - Replace `/ABSOLUTE/PATH/TO/PARENT` with your actual path > - To find the full path to `uv`, run: ```bash # On MacOS/Linux which uv # On Windows where uv ``` 4. **Verify Configuration** - Save the configuration file - Restart Claude Desktop - Look for the hammer 🔨 icon in the interface - Click it to see the available tools: - generate_access_token - stk_push (Future Implementation) - query_transaction_status (Future Implementation) - b2c_payment (Future Implementation) - account_balance (Future Implementation) ## Tools and Prompts ### Payment Tools #### stk_push Initiate an M-Pesa STK push request to prompt the customer to authorize a payment on their mobile device. **Inputs:** - `amount` (int): The amount to be paid - `phone_number` (int): The phone number of the customer **Returns:** JSON formatted M-PESA API response #### generate_qr_code Generate a QR code for a payment request that customers can scan to make payments. **Inputs:** - `merchant_name` (str): Name of the company/M-Pesa Merchant Name - `transaction_reference_no` (str): Transaction reference number - `amount` (int): The total amount for the sale/transaction - `transaction_type` (Literal["BG", "WA", "PB", "SM", "SB"]): Transaction type - `credit_party_identifier` (str): Credit Party Identifier (Mobile Number, Business Number, Agent Till, Paybill, or Merchant Buy Goods) **Returns:** JSON formatted M-PESA API response containing the QR code data ### Payment Prompts #### stk_push_prompt Generate a prompt for initiating an M-Pesa STK push payment request. **Inputs:** - `phone_number` (str): The phone number of the customer - `amount` (int): The amount to be paid - `purpose` (str): The purpose of the payment **Returns:** Formatted prompt string for STK push request #### generate_qr_code_prompt Generate a prompt for creating an M-Pesa QR code payment request. **Inputs:** - `merchant_name` (str): Name of the merchant/business - `amount` (int): Amount to be paid - `transaction_type` (str): Type of transaction (BG for Buy Goods, WA for Wallet, PB for Paybill, SM for Send Money, SB for Send to Business) - `identifier` (str): The recipient identifier (till number, paybill, phone number) - `reference` (str, optional): Transaction reference number. If not provided, a default will be used. **Returns:** Formatted prompt string for QR code generation ### Document Processing Tools #### create_source Create a connector from data source to unstructured server for processing. **Inputs:** - `connector_name` (str): The name of the source connector to create **Returns:** Source connector details including name and ID #### create_destination Create a connector from unstructured server to destination for data storage. **Inputs:** - `connector_name` (str): The name of the destination connector to create **Returns:** Destination connector details including name and ID #### create_workflow Create a workflow to process data from source connector to destination connector. **Inputs:** - `workflow_name` (str): The name of the workflow to create - `source_id` (str): The ID of the source connector - `destination_id` (str): The ID of the destination connector **Returns:** Workflow details including name, ID, status, type, sources, destinations, and schedule #### run_workflow Execute a workflow. **Inputs:** - `workflow_id` (str): The ID of the workflow to run **Returns:** Workflow execution status #### get_workflow_details Get detailed information about a workflow. **Inputs:** - `workflow_id` (str): The ID of the workflow to get details **Returns:** Workflow details including name, ID, and status #### fetch_documents Fetch documents analyzed during workflow execution. **Inputs:** None **Returns:** List of analyzed documents ### Prompts #### create_and_run_workflow_prompt Generate a prompt to create and run a workflow for document processing. **Inputs:** - `user_input` (str): The user's processing requirements **Returns:** Formatted prompt for workflow creation and execution **Example:** ```python # Example usage prompt = await create_and_run_workflow_prompt( user_input="Process all PDF invoices from the invoices folder and store them in the processed folder" ) # Returns: "The user wants to achieve Process all PDF invoices from the invoices folder and store them in the processed folder. Assist them by creating a source connector and a destination connector, then setting up the workflow and executing it." ``` ### Resources Currently, no resources are available. ## License [MIT License](LICENSE) ## Acknowledgments - Safaricom for providing the Daraja API - Anthropic for the MCP framework - Contributors to the project ## Contact For any inquiries, please open an issue on the GitHub repository.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jameskanyiri/DarajaMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server