Skip to main content
Glama
comet-ml

Opik MCP Server

by comet-ml

get-trace-by-id

Retrieve a specific trace by its ID to analyze or debug workflows in the Opik MCP Server. Supports optional workspace customization for targeted trace fetching.

Instructions

Get a single trace by ID

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
traceIdYesID of the trace to fetch
workspaceNameNoWorkspace name to use instead of the default

Implementation Reference

  • Handler function that makes API request to fetch the specific trace by ID, formats the input/output fields as JSON strings if they are objects, and returns a formatted response with details.
    async (args: any) => {
      const { traceId, workspaceName } = args;
      const response = await makeApiRequest<SingleTraceResponse>(
        `/v1/private/traces/${traceId}`,
        {},
        workspaceName
      );
    
      if (!response.data) {
        return {
          content: [{ type: 'text', text: response.error || 'Failed to fetch trace' }],
        };
      }
    
      // Format the response for better readability
      const formattedResponse: any = { ...response.data };
    
      // Format input/output if they're large
      if (
        formattedResponse.input &&
        typeof formattedResponse.input === 'object' &&
        Object.keys(formattedResponse.input).length > 0
      ) {
        formattedResponse.input = JSON.stringify(formattedResponse.input, null, 2);
      }
    
      if (
        formattedResponse.output &&
        typeof formattedResponse.output === 'object' &&
        Object.keys(formattedResponse.output).length > 0
      ) {
        formattedResponse.output = JSON.stringify(formattedResponse.output, null, 2);
      }
    
      return {
        content: [
          {
            type: 'text',
            text: `Trace Details for ID: ${traceId}`,
          },
          {
            type: 'text',
            text: JSON.stringify(formattedResponse, null, 2),
          },
        ],
      };
    }
  • Input schema for the get-trace-by-id tool using Zod validation: requires traceId (string, UUID), optional workspaceName (string).
      traceId: z
        .string()
        .describe(
          'ID of the trace to fetch (UUID format, e.g. "123e4567-e89b-12d3-a456-426614174000")'
        ),
      workspaceName: z
        .string()
        .optional()
        .describe('Workspace name to use instead of the default workspace'),
    },
  • Registration of the 'get-trace-by-id' tool within the loadTraceTools function, including name, description, input schema, and inline handler.
    server.tool(
      'get-trace-by-id',
      'Get detailed information about a specific trace including input, output, metadata, and timing information',
      {
        traceId: z
          .string()
          .describe(
            'ID of the trace to fetch (UUID format, e.g. "123e4567-e89b-12d3-a456-426614174000")'
          ),
        workspaceName: z
          .string()
          .optional()
          .describe('Workspace name to use instead of the default workspace'),
      },
      async (args: any) => {
        const { traceId, workspaceName } = args;
        const response = await makeApiRequest<SingleTraceResponse>(
          `/v1/private/traces/${traceId}`,
          {},
          workspaceName
        );
    
        if (!response.data) {
          return {
            content: [{ type: 'text', text: response.error || 'Failed to fetch trace' }],
          };
        }
    
        // Format the response for better readability
        const formattedResponse: any = { ...response.data };
    
        // Format input/output if they're large
        if (
          formattedResponse.input &&
          typeof formattedResponse.input === 'object' &&
          Object.keys(formattedResponse.input).length > 0
        ) {
          formattedResponse.input = JSON.stringify(formattedResponse.input, null, 2);
        }
    
        if (
          formattedResponse.output &&
          typeof formattedResponse.output === 'object' &&
          Object.keys(formattedResponse.output).length > 0
        ) {
          formattedResponse.output = JSON.stringify(formattedResponse.output, null, 2);
        }
    
        return {
          content: [
            {
              type: 'text',
              text: `Trace Details for ID: ${traceId}`,
            },
            {
              type: 'text',
              text: JSON.stringify(formattedResponse, null, 2),
            },
          ],
        };
      }
    );
  • src/index.ts:91-93 (registration)
    Conditional registration of the trace tools module (including get-trace-by-id) by calling loadTraceTools(server) when 'traces' toolset is enabled.
    if (config.enabledToolsets.includes('traces')) {
      server = loadTraceTools(server);
      logToFile('Loaded traces toolset');

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/comet-ml/opik-mcp'

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