L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

frontmcp-observability

frontmcp-observability

Use when adding tracing, structured logging, metrics, or monitoring to a FrontMCP server. Covers zero-config OpenTelemetry distributed tracing across all flows; the this.telemetry API for custom spans, events, and attributes in tools, plugins, agents, and skills; structured JSON logging with trace correlation and configurable sinks (Winston, Pino, stdout); …

Independent GitHub snapshot · Automated classification · Original documentation governs

Aagentfront / frontmcpApache-2.0

Documentation de la Skill

GitHub

name: frontmcp-observability description: 'Use when adding tracing, structured logging, metrics, or monitoring to a FrontMCP server. Covers zero-config OpenTelemetry distributed tracing across all flows; the this.telemetry API for custom spans, events, and attributes in tools, plugins, agents, and skills; structured JSON logging with trace correlation and configurable sinks (Winston, Pino, stdout); the off-by-default /metrics endpoint (process and framework metrics, Prometheus-compatible); vendor integrations (Coralogix, Datadog, Logz.io, Grafana Cloud, or any OTLP backend); and testing spans, log correlation, and instrumentation. Triggers: observability, telemetry, tracing, logging, monitoring, OpenTelemetry, OTel, spans, metrics, Prometheus, Datadog, Coralogix, Logz.io, Grafana, Winston, Pino.' tags: [router, observability, telemetry, tracing, logging, monitoring, opentelemetry, otel, spans] category: observability targets: [all] bundle: [recommended, full] priority: 10 visibility: both license: Apache-2.0 metadata: docs: https://frontmcp.dev/reference/server/observability

FrontMCP Observability

Router for adding observability to FrontMCP servers. Covers distributed tracing (OpenTelemetry), structured JSON logging, per-request log collection, the this.telemetry developer API, and vendor integrations.

When to Use This Skill

Must Use

  • Adding tracing, logging, or monitoring to a FrontMCP server
  • Connecting Coralogix, Datadog, Logz.io, Grafana, or any OTLP backend
  • Using this.telemetry to create custom spans in tools, plugins, or agents
  • Setting up structured logging with winston, pino, or NDJSON stdout
  • Testing that spans and log entries are created correctly

Recommended

  • Before going to production (see also frontmcp-production-readiness)
  • When debugging request latency or error rates
  • When building plugins that need trace context propagation

Skip When

  • Building a prototype that doesn't need observability yet
  • Configuring auth, transport, or throttle (see frontmcp-config)
  • Setting up the project from scratch (see frontmcp-setup)

Decision: Use this skill when you need to observe, trace, or log your server. Start with tracing-setup for auto-instrumentation, add structured-logging for production logs, and use telemetry-api for custom spans in your code.

Prerequisites

  • A working FrontMCP server (see frontmcp-setup)
  • npm install @frontmcp/observability

Step 1: Choose What You Need

I want to...Reference
Enable auto-tracing for all flowsreferences/tracing-setup.md
Add structured JSON logging with trace correlationreferences/structured-logging.md
Create custom spans in tools/pluginsreferences/telemetry-api.md
Connect Coralogix, Datadog, Logz.io, Grafanareferences/vendor-integrations.md
Test that spans and logs are correctreferences/testing-observability.md
Expose Prometheus /metrics endpointreferences/metrics-endpoint.md

Step 2: Enable Observability

The simplest way — one config line:

@FrontMcp({
  observability: true,
})

This enables auto-tracing for all SDK flows. Add structured logging:

@FrontMcp({
  observability: {
    tracing: true,
    logging: { sinks: [{ type: 'stdout' }] },
    requestLogs: true,
  },
})

Step 3: Read the Relevant Reference

Follow the scenario routing table above to find the right reference for your use case.

Scenario Routing Table

ScenarioReferenceDescription
Enable OpenTelemetry tracingreferences/tracing-setup.mdZero-config auto-instrumentation, setupOTel(), span hierarchy
Add JSON logs with trace correlationreferences/structured-logging.mdSinks (stdout, console, OTLP, winston, pino), redaction, log format
Custom spans in tools/pluginsreferences/telemetry-api.mdthis.telemetry.startSpan(), withSpan(), addEvent(), setAttributes()
Connect to monitoring platformsreferences/vendor-integrations.mdCoralogix, Datadog, Logz.io, Grafana — OTLP and direct
Test spans and log entriesreferences/testing-observability.mdcreateTestTracer(), assertSpanExists(), integration test patterns
Expose Prometheus /metrics endpointreferences/metrics-endpoint.mdOff-by-default Prometheus scrape endpoint with process + framework counters

Common Patterns

PatternCorrectIncorrectWhy
Enable observabilityobservability: true in @FrontMcp configImport and install ObservabilityPlugin manuallyConfig-driven is the standard pattern since v1.0
Custom spansthis.telemetry.withSpan('op', fn)trace.getTracer().startSpan() directlythis.telemetry auto-inherits trace context
Log correlationthis.logger.info('msg', { key: val })console.log('msg')SDK logger flows through StructuredLogTransport with trace_id
Session IDUse mcp.session.id attribute (hashed)Log the real session IDPrivacy: the hash is sufficient for correlation
Vendor integrationUse { type: 'otlp', endpoint } sinkBuild vendor-specific HTTP clientsOTLP is the universal standard

Quick Reference: What Gets Traced

CategoryFlowsAttributes
HTTP requeststraceRequest, auth, route, finalizehttp.request.method, url.path
Tool callsparseInput → findTool → execute → finalizemcp.component.type=tool, enduser.id
Resource readsparseInput → findResource → executemcp.component.type=resource, mcp.resource.uri
PromptsparseInput → findPrompt → executemcp.component.type=prompt
AgentsparseInput → findAgent → execute (nested tool calls)mcp.component.type=agent
Authverify, session verify, OAuth flowsfrontmcp.auth.mode, frontmcp.auth.result
TransportSSE, Streamable HTTP, Stateless HTTPfrontmcp.transport.type
Skillssearch, load, HTTP endpointsfrontmcp.flow.name

Verification Checklist

Configuration

  • @frontmcp/observability installed
  • observability field added to @FrontMcp config
  • TracerProvider configured (via setupOTel() or external SDK); the startup warning about a missing provider appears only when none is registered
  • Logging sinks configured for production (stdout or OTLP)

Runtime

  • Spans appear in trace backend when calling a tool
  • Log entries include trace_id and span_id
  • this.telemetry is available in tool execution contexts, and @frontmcp/observability is imported so it type-checks
  • Session tracing ID is consistent across all spans in a request
  • Errors are recorded on spans with ERROR status

Testing

  • Tests verify span creation with createTestTracer()
  • Tests verify log entries via CallbackSink
  • No test isolation issues (each test resets exporter)

Troubleshooting

ProblemCauseSolution
this.telemetry is undefined in a toolobservability not enabled on the parent @FrontMcp configSet observability: true (or a config object) in the @FrontMcp decorator; see tracing-setup
Property 'telemetry' does not exist (TS2339)@frontmcp/observability is not part of the compilationAdd import type {} from '@frontmcp/observability' where you use it (or once in the server entry); see telemetry-api
Spans appear without trace_id in logsLogger not connected to StructuredLogTransportUse this.logger, not console; see structured-logging
OTLP exporter silently drops spansEndpoint URL points at the UI, not the OTLP collectorUse the OTLP HTTP/gRPC ingest endpoint exposed by your vendor (Datadog, Coralogix, Logz, etc.); see vendor-integrations
Real session ID appears in span attributesA custom span attribute writes session.id directlyUse the SDK-provided mcp.session.id (already hashed); never log the raw session token
Tests randomly fail with leftover spansExporter retained between testsReset the in-memory exporter in afterEach; see testing-observability
OTel auto-instrumentation double-traces requestsBoth setupOTel() AND a vendor agent attached to the processPick one: either FrontMCP-managed OTel OR the vendor agent — not both

Examples

Each reference has matching examples under examples/<reference>/:

tracing-setup

ExampleLevelDescription
basic-tracingBasicEnable auto-tracing and see spans printed to your terminal.
production-tracingIntermediateFull production observability — traces to OTLP, structured logs to stdout, per-request log collection.

structured-logging

ExampleLevelDescription
stdout-loggingBasicEnable NDJSON structured logging to stdout with automatic trace correlation and field redaction.
winston-integrationIntermediateForward FrontMCP structured log entries to your existing winston logger. Each entry includes trace_id and span_id as metadata.

telemetry-api

ExampleLevelDescription
tool-custom-spansBasicCreate child spans, events, and attributes inside a tool's execute method using this.telemetry.
plugin-telemetryIntermediateAdd telemetry events from a custom plugin's hooks. Events appear on the tool execution span, giving you visibility into plugin behavior within the trace.
agent-nested-tracingAdvancedTrace an agent's execution lifecycle including its nested tool calls. Every span shares the same trace ID.

vendor-integrations

ExampleLevelDescription
coralogix-setupIntermediateSend both traces and structured logs to Coralogix. Logs include trace_id so Coralogix links them to traces automatically.

testing-observability

ExampleLevelDescription
test-custom-spansBasicVerify that your tool creates the expected child spans with correct attributes.
test-log-correlationIntermediateVerify that structured log entries include trace context fields for correlation with spans.

metrics-endpoint

ExampleLevelDescription
enable-metrics-endpointBasicTurn on the /metrics endpoint with defaults and scrape it with curl.

Accessing This Skill

Skills are distributed as plain SKILL.md files plus a sibling references/ and examples/ tree, so consumers can pick whichever access mode fits:

ModeHow it works
FilesystemRead libs/skills/catalog/frontmcp-observability/ directly from a clone of the catalog repo, or from a published @frontmcp/skills install. SKILL.md is the entry point.
frontmcp CLIfrontmcp skills list, frontmcp skills read frontmcp-observability, frontmcp skills read frontmcp-observability:references/<file>.md, frontmcp skills install frontmcp-observability — no server required.
MCP skill://When a developer mounts this skill into their own FrontMCP server (@FrontMcp({ skills: [...] })), the SDK exposes it via SEP-2640 resources: skill://frontmcp-observability/SKILL.md, skill://frontmcp-observability/references/{file}.md, etc. The server’s skill://index.json returns the SEP-2640 discovery document for everything mounted on it.

The catalog itself is not an MCP server. The skill:// URIs only resolve when a server has been configured to host this skill.

Reference

Skills enregistrées