Skip to main content
Glama
alanzha2

observe-instrument-mcp

by alanzha2

observe-instrument-mcp

An MCP server that automatically instruments Python AI agents with the ioa-observe-sdk — adding OpenTelemetry-based tracing, metrics, and logs with zero manual effort.

Works with any MCP-compatible AI coding assistant: Claude Desktop, Cursor, Windsurf, and others.

What it does

Two tools:

instrument_agent — reads a Python agent file, applies full observe SDK instrumentation, writes it back, and returns a summary of changes. Creates a .bak backup before modifying.

check_instrumentation — audits a file for missing instrumentation without modifying it.

Supported frameworks: LlamaIndex, LangGraph, CrewAI, raw OpenAI SDK.

Related MCP server: cursor-otel

Installation

pip install observe-instrument-mcp
# or
uv add observe-instrument-mcp

Requires an API key for your chosen LLM provider. Defaults to Claude (ANTHROPIC_API_KEY). See supported providers below.

Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "observe-instrument": {
      "command": "uvx",
      "args": ["observe-instrument-mcp"],
      "env": {
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project:

{
  "mcpServers": {
    "observe-instrument": {
      "command": "uvx",
      "args": ["observe-instrument-mcp"],
      "env": {
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "observe-instrument": {
      "command": "uvx",
      "args": ["observe-instrument-mcp"],
      "env": {
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Examples

Ready-to-use uninstrumented agent files are included in the examples/ folder:

examples/
  single-agent/
    openai-sdk-example.py      # OpenAI SDK customer support agent
    langgraph-example.py       # LangGraph currency converter
    llama-index-example.py     # LlamaIndex math agent
    crewai-example.py          # CrewAI research crew
  multi-agent/
    openai-sdk-multi-agent-example.py   # OpenAI SDK orchestrator pipeline
    langgraph-multi-agent-example.py    # LangGraph supervisor pattern
    llama-index-multi-agent-example.py  # LlamaIndex research + writing pipeline
    crewai-multi-agent-example.py       # CrewAI research + publishing crews

Usage

Once configured, ask your AI assistant:

Instrument my agent with the observe SDK: path/to/my_agent.py
Check what observe SDK instrumentation is missing from path/to/my_agent.py

Environment variables

Variable

Description

LLM_MODEL

Model to use (default: claude-sonnet-4-6). See provider table below.

ANTHROPIC_API_KEY

Required for Anthropic models

OPENAI_API_KEY

Required for OpenAI models

GEMINI_API_KEY

Required for Google Gemini models

GROQ_API_KEY

Required for Groq models

Supported providers

Provider

Key variable

LLM_MODEL example

Anthropic

ANTHROPIC_API_KEY

claude-sonnet-4-6

OpenAI

OPENAI_API_KEY

gpt-4o

Google Gemini

GEMINI_API_KEY

gemini/gemini-2.0-flash

Groq

GROQ_API_KEY

groq/llama-3.3-70b

Ollama (local, free)

none

ollama/llama3.2

After instrumentation

Install the SDK in your project:

pip install ioa-observe-sdk
# or
uv add ioa-observe-sdk

Start the observability stack (OTel Collector + ClickHouse):

cd path/to/observe/deploy
docker compose up -d

Run your agent:

OPENAI_API_KEY=sk-... OTLP_HTTP_ENDPOINT=http://localhost:4318 python my_agent.py

Query traces:

docker exec -it clickhouse-server clickhouse-client --user admin --password admin
SELECT SpanName, ServiceName, Duration / 1000000. AS ms, Timestamp
FROM otel_traces
ORDER BY Timestamp DESC
LIMIT 20;

Development

git clone https://github.com/alanzha2/observe-instrument-mcp
cd observe-instrument-mcp
pip install -e .

# Test the server locally
mcp dev observe_instrument_mcp/server.py

License

Apache-2.0

Available Tools

2 tools
check_instrumentationA
Read-onlyIdempotent

Audit a Python AI agent file for missing ioa-observe-sdk instrumentation.

Read-only — does not modify the file. Use instrument_agent to apply changes.

Args: file_path: Path to the Python file to audit.

Returns: Audit report: what is present, what is missing, and specific recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about the audit scope (missing instrumentation) and the return content (audit report with specifics), which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: purpose, read-only note with sibling link, and args/returns. Front-loaded main purpose, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter, implied output schema, and sibling tool, the description covers purpose, behavior, parameters, and return value. No missing context for proper use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description's 'Args' section explains that 'file_path' is 'Path to the Python file to audit', adding meaning beyond the schema's type and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Audit' and resource 'Python AI agent file', specifying the scope 'for missing ioa-observe-sdk instrumentation'. It clearly distinguishes from the sibling tool 'instrument_agent' by stating 'Read-only — does not modify the file'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Read-only — does not modify the file' and 'Use instrument_agent to apply changes', providing clear when-to-use and when-not-to-use guidance with an explicit alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

instrument_agentA

Read a Python AI agent file, add ioa-observe-sdk instrumentation, and write it back.

Adds Observe.init(), SDK imports, @tool/@agent/@graph/@workflow decorators, and session_start() — covering LlamaIndex, LangGraph, CrewAI, and raw OpenAI SDK agents. Creates a .bak backup before modifying the file.

Args: file_path: Path to the Python file to instrument. app_name: Optional app name for Observe.init(). Inferred from file if omitted.

Returns: Summary of all changes made, the diff, and next steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
app_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-read-only, non-destructive, non-idempotent, non-open-world. The description adds behavioral details: creating a .bak backup, modifying the file by adding imports and decorators, and returning a summary. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a main purpose sentence, followed by details and an Args section. It is concise (6 sentences) but front-loads key information appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the description covers the return (summary, diff, next steps) and backup behavior, it is largely complete. Minor gaps like error handling or file existence prerequisites are absent but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates. It explains 'file_path' as the path to the Python file and 'app_name' as an optional app name for Observe.init() inferred from the file if omitted, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: reading a Python AI agent file, adding instrumentation, and writing it back. It specifies the resource (Python AI agent file) and lists supported frameworks (LlamaIndex, LangGraph, CrewAI, raw OpenAI SDK), distinguishing it from the sibling tool 'check_instrumentation'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives like 'check_instrumentation'. It implies usage for instrumenting a file but lacks when-not-to-use conditions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.2
    • First observedcheck_instrumentation
    • First observedinstrument_agent

TDQS

A4.5/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one audits for missing instrumentation (read-only), the other applies the instrumentation (modifies the file). There is no overlap or ambiguity.

Naming Consistency5/5

Both tools follow a consistent verb_noun snake_case pattern: check_instrumentation and instrument_agent. The naming is clear and predictable.

Tool Count4/5

With only 2 tools, the server is minimal but appropriately scoped for its specific workflow of auditing and instrumenting Python AI agent files. It is slightly below the typical 3-15 range but still well-focused.

Completeness5/5

The tool set covers the full lifecycle for the stated purpose: check for missing instrumentation and apply it. There is no obvious gap—the backup creation in instrument_agent provides a safety net.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides comprehensive monitoring and observability for MCP server ecosystems with real-time health checks, performance metrics, distributed tracing, anomaly detection, and automated performance reports using OpenTelemetry and Prometheus.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that instruments Cursor AI agent interactions with OpenTelemetry traces and logs to monitor agent turns and performance. It enables tracking of user queries, assistant responses, and tool usage through GenAI-compliant telemetry spans.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that gives AI agents access to your application's OpenTelemetry traces for querying, analysis, and debugging.
    5
    16
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that demonstrates comprehensive observability with Sentry, OpenTelemetry, and Braintrust, providing tools for file, data, and HTTP operations along with real-time status and configuration resources.
    -

Latest Blog Posts

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/alanzha2/observe-instrument-mcp'

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