bloomy mcp

Local 2025-09-01 00:47:59 0
Developer Tools @franccesco/bloomy-mcp

A Model Context Protocol server that connects AI assistants to Bloom Growth's GraphQL API, enabling them to query data and execute operations against the Bloom Growth platform.


A Model Context Protocol (MCP) server for interacting with Bloom Growth's GraphQL API.

Overview

Bloomy MCP is a server that connects to Bloom Growth's GraphQL API and exposes it through the Model Context Protocol, enabling AI assistants to perform operations against the Bloom Growth platform.

Features

  • Query Bloom Growth GraphQL API through MCP
  • Retrieve query and mutation details
  • Execute GraphQL queries and mutations via MCP tools
  • Get authenticated user information
  • Automatic schema introspection

Installation

Prerequisites

  • Python 3.12 or higher
  • Access to Bloom Growth API
  • uv (recommended) or pip for package management

Package Management

This project recommends using uv, a fast Python package installer and resolver that serves as a drop-in replacement for pip/pip-tools. It's significantly faster than traditional package managers.

Installing uv

curl -sSf https://astral.sh/uv/install.sh | sh

For other installation methods, see the uv documentation.

Setup

  1. Clone this repository
  2. Set up a Python virtual environment:
    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venvScriptsactivate
  3. Install the package in development mode:

Using pip:

pip install -e .

Using uv (recommended):

uv pip install -e .

For development dependencies:

uv pip install -e ".[dev]"

Environment Variables

Create a .env file with the following variables:

BLOOM_API_URL=<Your Bloom API URL>
BLOOM_API_TOKEN=<Your Bloom API Token>

Usage

Cursor Integration

To use this MCP server with Cursor (AI-powered IDE):

  1. Go to Cursor > Cursor Settings > MCP
  2. Click on "Add new MCP server"
  3. Configure the server with the following details:

  4. Name: "Bloom Growth" (or "BG" or any name you prefer)

  5. Type: Command
  6. Command: uv run --project /path/to/your/repo/ --env-file /path/to/your/repo/.env bloomy-server

Important: Replace /path/to/your/repo/ with the actual path to your bloomy-mcp repository (e.g., /Users/username/workspace/bloomy-mcp/).

Running the Server

Start the Bloomy MCP server:

bloomy-server

Development Mode Inspection

For development and debugging purposes, you can use the MCP inspector tool:

npx @modelcontextprotocol/inspector bloomy-server

This allows you to inspect the MCP server's behavior and responses during development.

For optimal development workflow:

  • direnv: Use for managing environment variables and automatically loading them when entering the project directory
  • uv: Use for fast and reliable package management

Setting up direnv:

  1. Install direnv (e.g., brew install direnv on macOS)
  2. Create a .envrc file in your project root:
    export BLOOM_API_URL=your_api_url
    export BLOOM_API_TOKEN=your_api_token
  3. Run direnv allow to authorize the environment variables

This combination of tools (direnv + uv) provides an efficient environment for both secrets management and package management.

Available MCP Tools

The following MCP tools are available for AI assistants:

  • get_query_details - Get detailed information about specific GraphQL queries
  • get_mutation_details - Get detailed information about specific GraphQL mutations
  • execute_query - Execute a GraphQL query or mutation with variables
  • get_authenticated_user_id - Get the ID of the currently authenticated user

Available MCP Resources

  • bloom://queries - Get a list of all available queries
  • bloom://mutations - Get a list of all available mutations

Development

Project Structure

src/
  └── bloomy_mcp/
      ├── __init__.py        # Package initialization
      ├── client.py          # GraphQL client implementation
      ├── formatters.py      # Data formatting utilities
      ├── introspection.py   # GraphQL schema introspection
      ├── operations.py      # GraphQL operation utilities
      └── server.py          # MCP server implementation

Dependencies

  • mcp[cli] - Model Context Protocol server
  • gql - GraphQL client library
  • httpx - HTTP client
  • pyyaml - YAML processing
[
  {
    "description": "Get detailed information about specific GraphQL queries.      Retrieves argument requirements, return type information, descriptions, and     example usage for the specified queries.      Args:         query_names: Comma-separated list of query names to get details for      Returns:         A YAML-formatted string containing detailed information about the requested queries     ",
    "inputSchema": {
      "properties": {
        "query_names": {
          "title": "Query Names",
          "type": "string"
        }
      },
      "required": [
        "query_names"
      ],
      "title": "get_query_detailsArguments",
      "type": "object"
    },
    "name": "get_query_details"
  },
  {
    "description": "Get detailed information about specific GraphQL mutations.      Retrieves argument requirements, return type information, descriptions, and     example usage for the specified mutations.      Args:         mutation_names: Comma-separated list of mutation names to get details for      Returns:         A YAML-formatted string containing detailed information about the requested mutations     ",
    "inputSchema": {
      "properties": {
        "mutation_names": {
          "title": "Mutation Names",
          "type": "string"
        }
      },
      "required": [
        "mutation_names"
      ],
      "title": "get_mutation_detailsArguments",
      "type": "object"
    },
    "name": "get_mutation_details"
  },
  {
    "description": "Execute a GraphQL query or mutation with variables.      Parses and executes the provided GraphQL operation string with optional variables.      Args:         query: Raw GraphQL query or mutation string         variables: Optional dictionary of variables to use in the operation      Returns:         Dictionary containing the operation results or an error message string      Raises:         Exception: Handled internally, returns error message as string     ",
    "inputSchema": {
      "properties": {
        "query": {
          "title": "Query",
          "type": "string"
        },
        "variables": {
          "anyOf": [
            {
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Variables"
        }
      },
      "required": [
        "query"
      ],
      "title": "execute_queryArguments",
      "type": "object"
    },
    "name": "execute_query"
  },
  {
    "description": "Get the ID of the currently authenticated user.      Uses a special mutation to retrieve the ID of the user associated with     the current API token.      Returns:         User ID string if successful, None if user not found, or error message string      Raises:         Exception: Handled internally, returns error message as string     ",
    "inputSchema": {
      "properties": {},
      "title": "get_authenticated_user_idArguments",
      "type": "object"
    },
    "name": "get_authenticated_user_id"
  }
]