Skip to main content
Glama

Tinybird MCP server

Official
by tinybirdco
# MCP analytics template for Tinybird This template includes the necessary code to implement remote MCP Server Analytics using Tinybird. [Watch a video demo](https://www.youtube.com/watch?v=8MlFALTsUqY) to learn how it works. ## Quick start Follow these steps to get started. ### Create a new Tinybird Workspace Click the button to deploy the project to your Tinybird Workspace. You'll be prompted to create a free Tinybird account if you don't yet have one. [![Deploy to Tinybird](https://cdn.tinybird.co/static/images/Tinybird-Deploy-Button.svg)](https://app.tinybird.co?starter_kit=https://github.com/tinybirdco/mcp-tinybird/mcp-server-analytics/tinybird) Deploying the project automatically creates: 1. Data Sources to store the log events 2. SQL Pipes to build metrics 3. Published API endpoints in Prometheus format ### Send log events #### Using Python Add the following dependency to your `requirements.txt` file: ``` tinybird-python-sdk>=0.1.6 ``` Configure the logging handler: ```python import logging from multiprocessing import Queue from tb.logger import TinybirdLoggingQueueHandler from dotenv import load_dotenv load_dotenv() TB_API_URL = os.getenv("TB_API_URL") TB_WRITE_TOKEN = os.getenv("TB_WRITE_TOKEN") logger = logging.getLogger('your-logger-name') handler = TinybirdLoggingQueueHandler(Queue(-1), TB_API_URL, TB_WRITE_TOKEN, 'your-app-name', ds_name="mcp_logs_python") formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) ``` - Replace `TB_WRITE_TOKEN` with the `mcp_public_write_token` located in the [Tinybird dashboard](https://app.tinybird.co/tokens). - Your `TB_API_URL` is the URL of your Tinybird region. See [Regions and endpoints](https://www.tinybird.co/docs/api-reference#regions-and-endpoints). To properly process your log events, add an extra dictionary with the `tool`, `resource`, `prompt`, `mcp_server_version` and `session` keys when it applies. That way the provided Tinybird Workspace will be able to process metrics by tool, resource, prompt and session. ```python logger.info(f"handle_call_tool {name}", extra={"session": session, "tool": name, "mcp_server_version": "0.1.4"}) ``` See some sample logger calls [here](https://github.com/tinybirdco/mcp-tinybird/blob/main/src/mcp_tinybird/server.py) #### Using TypeScript ```js const loggingToken = "<TB_WRITE_TOKEN>"; const loggingEndpoint = "<TB_API_URL>/v0/events?name=mcp_logs"; const loggingSession = crypto.randomUUID(); async function logger(level: string, record: object) { try { await fetch( loggingEndpoint, { method: 'POST', body: JSON.stringify({ timestamp: new Date().toISOString(), session: loggingSession, level: level, record: JSON.stringify(record) }), headers: { Authorization: `Bearer ${loggingToken}` } } ) .then((res: Response) => { /**process.stderr.write("logged");**/ }); } catch (error) { // process.stderr.write("error logging"); } ``` - Replace `TB_WRITE_TOKEN` with the `mcp_public_write_token` located in the [Tinybird dashboard](https://app.tinybird.co/tokens). - Your `TB_API_URL` is the URL of your Tinybird region. See [Regions and endpoints](https://www.tinybird.co/docs/api-reference#regions-and-endpoints). To properly process your log events, add the following keys to the `record` JSON object: ```js record = { "appName": "mcp-tinybird", "funcName": "handle_call_tool", "tool": "run-select-query", "prompt": "", "resource": "", "level": "info", "version": "0.1.4", "message": "this is a message" } ``` See some sample logger calls [here](See [ClaudeKeep](https://github.com/sdairs/claudekeep/blob/main/apps/mcp/src/index.ts) ### Monitor with Grafana and Prometheus Add this to your `prometheus.yml` file: ```yaml scrape_configs: - job_name: mcp_server scrape_interval: 15s # Adjust the scrape interval as needed scheme: 'https' static_configs: - targets: - 'api.tinybird.co' # Adjust this for your region if necessary metrics_path: '/v0/pipes/api_prometheus.prometheus' bearer_token: '<your-public-prometheus-token>' ``` Find `<your-public-prometheus-token>` in the [Tinybird dashboard](https://app.tinybird.co/tokens) with the name `prometheus`. You should start seeing your metrics in Grafana to build your own dashboards and alerts. ![](./prometheus.png) You can find a sample dashboard for Grafana can be found [here](./mcp-server-metrics-with-logs-v1.json). Click the image to watch a video on how to import the Dashboard into Grafana: [![Import Grafana Dashboard](./dashboard.png)](https://youtu.be/lOz5opvM24Q) ## Components The project uses Python and Typescript logging handlers to send events to the Tinybird [Events API](https://www.tinybird.co/docs/ingest/events-api) transforms the events and publishes metrics as Prometheus endpoints that you can integrate with your preferred observability tool.

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/tinybirdco/mcp-tinybird'

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