Skip to main content
Glama
AgentOps-AI

AgentOps MCP

Official
by AgentOps-AI

auth

Authorize access to AgentOps MCP server by validating API keys for observability and tracing data during AI agent debugging.

Instructions

Authorize using the AGENTOPS_API_KEY. If the API key is not provided and cannot be found in the directory, ask the user for the API key.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
api_keyNoAgentOps project API key (optional if AGENTOPS_API_KEY environment variable is set)

Implementation Reference

  • Handler logic for the 'auth' tool: authenticates using provided or env API key, stores JWT token in server state, fetches project name for confirmation.
    case "auth": {
      const { api_key } = args as { api_key?: string };
    
      // Check if already authenticated
      if (serverState.isAuthenticated() && !api_key) {
        return {
          content: [
            {
              type: "text",
              text: JSON.stringify(
                {
                  success: true,
                  message: "Already authenticated",
                  source:
                    "Previously authenticated (likely from environment variable on startup)",
                },
                null,
                2,
              ),
            },
          ],
        };
      }
    
      // Try to get API key from environment first, then from parameter
      const actualApiKey = api_key || process.env["AGENTOPS_API_KEY"];
      if (!actualApiKey) {
        throw new Error(
          "No project API key available. Please provide a project API key.",
        );
      }
    
      const authResult = await authWithApiKey(actualApiKey);
      if (typeof authResult === "object" && "error" in authResult) {
        throw new Error(`Authentication failed: ${authResult.error}`);
      }
    
      // Store the JWT token in server state
      serverState.setJwtToken(authResult);
    
      const result = await makeAuthenticatedRequest(`/public/v1/project`);
      const name = result.name;
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(
              {
                success: true,
                message: "Authentication successful",
                project: name,
              },
              null,
              2,
            ),
          },
        ],
      };
    }
  • Input schema definition for the 'auth' tool, as returned in ListTools response.
    {
      name: "auth",
      description:
        "Authorize using the AGENTOPS_API_KEY. If the API key is not provided and cannot be found in the directory, ask the user for the API key.",
      inputSchema: {
        type: "object",
        properties: {
          api_key: {
            type: "string",
            description:
              "AgentOps project API key (optional if AGENTOPS_API_KEY environment variable is set)",
          },
        },
        required: [],
      },
    },
  • src/index.ts:162-226 (registration)
    Registration of the 'auth' tool via the ListToolsRequestSchema handler, including it in the tools list.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: [
          {
            name: "auth",
            description:
              "Authorize using the AGENTOPS_API_KEY. If the API key is not provided and cannot be found in the directory, ask the user for the API key.",
            inputSchema: {
              type: "object",
              properties: {
                api_key: {
                  type: "string",
                  description:
                    "AgentOps project API key (optional if AGENTOPS_API_KEY environment variable is set)",
                },
              },
              required: [],
            },
          },
          {
            name: "get_trace",
            description: "Get trace information and metrics by trace_id.",
            inputSchema: {
              type: "object",
              properties: {
                trace_id: {
                  type: "string",
                  description: "Trace ID",
                },
              },
              required: ["trace_id"],
            },
          },
          {
            name: "get_span",
            description: "Get span information and metrics by span_id.",
            inputSchema: {
              type: "object",
              properties: {
                span_id: {
                  type: "string",
                  description: "Span ID",
                },
              },
              required: ["span_id"],
            },
          },
          {
            name: "get_complete_trace",
            description:
              "Reserved for explicit requests for COMPLETE or ALL data. Get complete trace information and metrics by trace_id.",
            inputSchema: {
              type: "object",
              properties: {
                trace_id: {
                  type: "string",
                  description: "Trace ID",
                },
              },
              required: ["trace_id"],
            },
          },
        ],
      };
    });
  • Helper function authWithApiKey that performs the actual API call to obtain JWT token from AgentOps.
    async function authWithApiKey(apiKey: string): Promise<string | ErrorResponse> {
      const data = { api_key: apiKey };
    
      try {
        const response: AxiosResponse = await axios.post(
          `${HOST}/public/v1/auth/access_token`,
          data,
        );
        const bearer = response.data?.bearer;
        if (!bearer) {
          throw new Error("No bearer token received from auth endpoint");
        }
        return bearer;
      } catch (error) {
        return { error: error instanceof Error ? error.message : String(error) };
      }
    }
  • ServerState class that manages the JWT token and provides auth headers and auth status checks.
    class ServerState {
      private jwtToken: string | null = null;
    
      setJwtToken(token: string): void {
        this.jwtToken = token;
      }
    
      getAuthHeaders(): AuthHeaders | null {
        if (!this.jwtToken) {
          return null;
        }
        return {
          Authorization: `Bearer ${this.jwtToken}`,
          "User-Agent": "agentops-mcp/0.3.5",
        };
      }
    
      isAuthenticated(): boolean {
        return this.jwtToken !== null;
      }
    
      clearAuth(): void {
        this.jwtToken = null;
      }
    }
Install Server

Other Tools

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/AgentOps-AI/agentops-mcp'

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