{
  "schemaVersion": "1.0",
  "title": "Langfuse MCP Servers",
  "description": "Connect MCP clients to Langfuse Cloud for project-scoped prompt management and to Langfuse Docs for public documentation search and retrieval.",
  "build": {
    "generatedAt": "2026-05-18T09:46:53.308Z",
    "generator": "src/lib/reference-builder.ts",
    "sourceConfig": "mcp-reference.config.json",
    "serverCount": 2,
    "toolCount": 9
  },
  "servers": [
    {
      "id": "langfuse-cloud",
      "name": "Langfuse Cloud MCP",
      "description": "Authenticated project-scoped MCP server for Langfuse Cloud projects.",
      "canonicalUrl": "https://cloud.langfuse.com/api/public/mcp",
      "auth": {
        "type": "basic",
        "publicKeyEnv": "LANGFUSE_PUBLIC_KEY",
        "secretKeyEnv": "LANGFUSE_SECRET_KEY"
      },
      "variants": [
        {
          "label": "Cloud EU",
          "url": "https://cloud.langfuse.com/api/public/mcp"
        },
        {
          "label": "Cloud US",
          "url": "https://us.cloud.langfuse.com/api/public/mcp"
        },
        {
          "label": "Cloud Japan",
          "url": "https://jp.cloud.langfuse.com/api/public/mcp"
        },
        {
          "label": "HIPAA US",
          "url": "https://hipaa.cloud.langfuse.com/api/public/mcp"
        },
        {
          "label": "Self-Hosted",
          "url": "https://your-domain.com/api/public/mcp"
        },
        {
          "label": "Local Development",
          "url": "http://localhost:3000/api/public/mcp"
        }
      ],
      "setupSnippets": [
        {
          "id": "langfuse-cloud-cursor",
          "client": "Cursor",
          "title": "Cursor mcp.json",
          "language": "json",
          "code": "{\n  \"mcpServers\": {\n    \"langfuse-cloud\": {\n      \"url\": \"https://cloud.langfuse.com/api/public/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Basic <base64(LANGFUSE_PUBLIC_KEY:LANGFUSE_SECRET_KEY)>\"\n      }\n    }\n  }\n}"
        },
        {
          "id": "langfuse-cloud-claude-code",
          "client": "Claude Code",
          "title": "Claude Code CLI",
          "language": "bash",
          "code": "export LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key\nexport LANGFUSE_SECRET_KEY=sk-lf-your-secret-key\nclaude mcp add --transport http langfuse-cloud https://cloud.langfuse.com/api/public/mcp \\\n  --header \"Authorization: Basic $(printf '%s:%s' \"$LANGFUSE_PUBLIC_KEY\" \"$LANGFUSE_SECRET_KEY\" | base64)\""
        },
        {
          "id": "langfuse-cloud-generic",
          "client": "Generic MCP client",
          "title": "Streamable HTTP JSON",
          "language": "json",
          "code": "{\n  \"servers\": {\n    \"langfuse-cloud\": {\n      \"transport\": {\n        \"type\": \"streamable-http\",\n        \"url\": \"https://cloud.langfuse.com/api/public/mcp\",\n        \"headers\": {\n          \"Authorization\": \"Basic <base64(LANGFUSE_PUBLIC_KEY:LANGFUSE_SECRET_KEY)>\"\n        }\n      }\n    }\n  }\n}"
        }
      ],
      "discovery": {
        "protocolVersion": "2025-06-18",
        "serverInfo": {
          "name": "langfuse",
          "version": "0.2.0"
        },
        "capabilities": {
          "tools": {}
        },
        "discoveredAt": "2026-05-18T09:46:52.993Z"
      },
      "tools": [
        {
          "name": "getPrompt",
          "description": "Fetch a specific prompt by name with optional label or version parameter.\n\nRetrieval options:\n- label: Get prompt with specific label (e.g., 'production', 'staging')\n- version: Get specific version number (e.g., 1, 2, 3)\n- neither: Returns 'production' version by default\n\nNote: label and version are mutually exclusive. Returns full prompt content with resolved dependencies.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "The name of the prompt"
              },
              "label": {
                "description": "Label to retrieve (e.g., \"production\", \"staging\"). Defaults to \"production\".",
                "type": "string",
                "minLength": 1,
                "maxLength": 36,
                "pattern": "^[a-z0-9_\\-.]+$"
              },
              "version": {
                "description": "Specific version number to retrieve (e.g., 1, 2, 3)",
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": false
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "getPrompt",
              "arguments": {
                "name": "string",
                "label": "string",
                "version": 1
              }
            }
          }
        },
        {
          "name": "getPromptUnresolved",
          "description": "Fetch a specific prompt by name with optional label or version parameter WITHOUT resolving dependencies.\n\nReturns the raw prompt content with dependency tags intact. Useful for:\n- Understanding prompt composition/stacking before resolution\n- Debugging prompt dependencies\n- Analyzing the dependency graph structure\n\nRetrieval options:\n- label: Get prompt with specific label (e.g., 'production', 'staging')\n- version: Get specific version number (e.g., 1, 2, 3)\n- neither: Returns 'production' version by default\n\nNote: label and version are mutually exclusive. To get resolved prompts, use the 'getPrompt' tool instead.",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "The name of the prompt"
              },
              "label": {
                "description": "Label to retrieve (e.g., \"production\", \"staging\"). Defaults to \"production\".",
                "type": "string",
                "minLength": 1,
                "maxLength": 36,
                "pattern": "^[a-z0-9_\\-.]+$"
              },
              "version": {
                "description": "Specific version number to retrieve (e.g., 1, 2, 3)",
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": false
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "getPromptUnresolved",
              "arguments": {
                "name": "string",
                "label": "string",
                "version": 1
              }
            }
          }
        },
        {
          "name": "listPrompts",
          "description": "List and filter prompts in the project. Returns metadata including versions, labels, tags, last updated timestamp, and prompt type.\n\nOptional filters:\n- name: Filter by exact prompt name\n- label: Filter by label on any version\n- tag: Filter by tag\n- fromUpdatedAt: Filter prompts updated at or after this timestamp\n- toUpdatedAt: Filter prompts updated at or before this timestamp\n\nPagination: page (default: 1), limit (default: 50, max: 100)",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "name": {
                "description": "Filter by exact prompt name match",
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              "label": {
                "description": "Filter by label (e.g., 'production', 'staging')",
                "type": "string",
                "minLength": 1,
                "maxLength": 36,
                "pattern": "^[a-z0-9_\\-.]+$"
              },
              "tag": {
                "description": "Filter by tag (e.g., 'experimental', 'v1')",
                "type": "string"
              },
              "fromUpdatedAt": {
                "description": "Filter prompts updated at or after this timestamp (ISO 8601 with timezone, e.g. 2026-02-02T00:00:00Z)",
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "toUpdatedAt": {
                "description": "Filter prompts updated at or before this timestamp (ISO 8601 with timezone, e.g. 2026-02-02T00:00:00Z)",
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "page": {
                "default": 1,
                "description": "Page number for pagination (default: 1)",
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "default": 50,
                "description": "Number of items to return (1-100, default: 50)",
                "type": "integer",
                "minimum": 1,
                "maximum": 100
              }
            },
            "required": [
              "page",
              "limit"
            ],
            "additionalProperties": false
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "listPrompts",
              "arguments": {
                "limit": 50,
                "page": 1,
                "fromUpdatedAt": "2026-05-15T12:00:00.000Z",
                "label": "string",
                "name": "string",
                "tag": "string",
                "toUpdatedAt": "2026-05-15T12:00:00.000Z"
              }
            }
          }
        },
        {
          "name": "createTextPrompt",
          "description": "Create a new text prompt version in Langfuse.\n\nImportant:\n- Prompts are immutable - cannot modify existing versions\n- To update content, create a new version\n- To promote to production, use updatePromptLabels\n- Labels are unique across versions\n- Use {{variable_name}} syntax for dynamic content\n\nAccepts: name, prompt (string), optional labels, config, tags, commitMessage",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "The name of the prompt"
              },
              "prompt": {
                "type": "string",
                "description": "The prompt text content (supports {{variables}})"
              },
              "labels": {
                "description": "Labels to assign (e.g., ['production', 'staging'])",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {
                "description": "Optional JSON config (e.g., {model: 'gpt-4', temperature: 0.7})",
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "tags": {
                "description": "Optional tags for organization (e.g., ['experimental', 'v2'])",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "commitMessage": {
                "description": "Optional commit message describing the changes",
                "type": "string"
              }
            },
            "required": [
              "name",
              "prompt"
            ],
            "additionalProperties": false
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "createTextPrompt",
              "arguments": {
                "name": "string",
                "prompt": "string",
                "commitMessage": "string",
                "config": {
                  "property": {}
                },
                "labels": [
                  "string"
                ],
                "tags": [
                  "string"
                ]
              }
            }
          }
        },
        {
          "name": "createChatPrompt",
          "description": "Create a new chat prompt version in Langfuse. Chat prompts are arrays of messages with roles and content.\n\nImportant:\n- Prompts are immutable - cannot modify existing versions\n- To update content, create a new version\n- To promote to production, use updatePromptLabels\n- Labels are unique across versions\n\nMessage roles: system (instructions), user (input, can contain {{variables}}), assistant (examples)\nAccepts: name, prompt (array of {role, content}), optional labels, config, tags, commitMessage",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "The name of the prompt"
              },
              "prompt": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "role": {
                      "type": "string",
                      "description": "The role (e.g., 'system', 'user', 'assistant')"
                    },
                    "content": {
                      "type": "string",
                      "description": "The message content"
                    }
                  },
                  "required": [
                    "role",
                    "content"
                  ],
                  "additionalProperties": false
                },
                "description": "Array of chat messages with role and content"
              },
              "labels": {
                "description": "Labels to assign (e.g., ['production', 'staging'])",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {
                "description": "Optional JSON config (e.g., {model: 'gpt-4', temperature: 0.7})",
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "tags": {
                "description": "Optional tags for organization (e.g., ['experimental', 'v2'])",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "commitMessage": {
                "description": "Optional commit message describing the changes",
                "type": "string"
              }
            },
            "required": [
              "name",
              "prompt"
            ],
            "additionalProperties": false
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "createChatPrompt",
              "arguments": {
                "name": "string",
                "prompt": [
                  {
                    "content": "string",
                    "role": "string"
                  }
                ],
                "commitMessage": "string",
                "config": {
                  "property": {}
                },
                "labels": [
                  "string"
                ],
                "tags": [
                  "string"
                ]
              }
            }
          }
        },
        {
          "name": "updatePromptLabels",
          "description": "Update labels for a specific prompt version.\n\nImportant:\n- ONLY way to modify existing prompts (labels only)\n- Specified labels are added to the version (preserving others not mentioned)\n- Labels are unique across versions - setting a label on one version automatically removes it from others\n- 'latest' label is auto-managed and cannot be set manually\n- Cannot modify prompt content, type, or tags - use createTextPrompt or createChatPrompt for new versions\n\nAccepts: name, version (required), newLabels (array, can be empty to remove all labels)",
          "inputSchema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "The name of the prompt"
              },
              "version": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991,
                "description": "The version number to update (required)"
              },
              "newLabels": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Array of new labels to assign to the prompt version (can be empty to remove all labels)"
              }
            },
            "required": [
              "name",
              "version",
              "newLabels"
            ],
            "additionalProperties": false
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "updatePromptLabels",
              "arguments": {
                "name": "string",
                "newLabels": [
                  "string"
                ],
                "version": 1
              }
            }
          }
        }
      ],
      "resources": [],
      "prompts": []
    },
    {
      "id": "langfuse-docs",
      "name": "Langfuse Docs MCP",
      "description": "Unauthenticated MCP server for Langfuse documentation search and retrieval.",
      "canonicalUrl": "https://langfuse.com/api/mcp",
      "auth": {
        "type": "none"
      },
      "variants": [],
      "setupSnippets": [
        {
          "id": "langfuse-docs-cursor",
          "client": "Cursor",
          "title": "Cursor mcp.json",
          "language": "json",
          "code": "{\n  \"mcpServers\": {\n    \"langfuse-docs\": {\n      \"url\": \"https://langfuse.com/api/mcp\"\n    }\n  }\n}"
        },
        {
          "id": "langfuse-docs-vscode",
          "client": "VS Code Copilot",
          "title": "VS Code settings.json",
          "language": "json",
          "code": "{\n  \"mcp\": {\n    \"servers\": {\n      \"langfuse-docs\": {\n        \"type\": \"http\",\n        \"url\": \"https://langfuse.com/api/mcp\"\n      }\n    }\n  }\n}"
        },
        {
          "id": "langfuse-docs-claude-code",
          "client": "Claude Code",
          "title": "Claude Code CLI",
          "language": "bash",
          "code": "claude mcp add --transport http langfuse-docs https://langfuse.com/api/mcp"
        },
        {
          "id": "langfuse-docs-windsurf",
          "client": "Windsurf",
          "title": "Proxy command",
          "language": "json",
          "code": "{\n  \"mcpServers\": {\n    \"langfuse-docs\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https://langfuse.com/api/mcp\"\n      ]\n    }\n  }\n}"
        },
        {
          "id": "langfuse-docs-generic",
          "client": "Generic MCP client",
          "title": "Streamable HTTP JSON",
          "language": "json",
          "code": "{\n  \"servers\": {\n    \"langfuse-docs\": {\n      \"transport\": {\n        \"type\": \"streamable-http\",\n        \"url\": \"https://langfuse.com/api/mcp\"\n      }\n    }\n  }\n}"
        }
      ],
      "discovery": {
        "protocolVersion": "2025-06-18",
        "serverInfo": {
          "name": "mcp-typescript server on vercel",
          "version": "0.1.0"
        },
        "capabilities": {
          "tools": {
            "listChanged": true
          }
        },
        "discoveredAt": "2026-05-18T09:46:53.308Z"
      },
      "tools": [
        {
          "name": "searchLangfuseDocs",
          "description": "Semantic search (RAG) over the Langfuse documentation. Use this whenever the user asks a broader question that cannot be answered by a specific single page. Returns a concise answer synthesized from relevant docs. The raw provider response is included in _meta. Prefer this before guessing. If a specific page is needed call getLangfuseDocsPage first.",
          "inputSchema": {
            "type": "object",
            "properties": {
              "query": {
                "type": "string",
                "description": "The user's question in natural language. Include helpful context like SDK/language (e.g., Python v3, JS v4), self-hosted vs cloud, and short error messages (trim long stack traces). Keep under ~600 characters."
              }
            },
            "required": [
              "query"
            ],
            "additionalProperties": false,
            "$schema": "http://json-schema.org/draft-07/schema#"
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "searchLangfuseDocs",
              "arguments": {
                "query": "string"
              }
            }
          }
        },
        {
          "name": "getLangfuseDocsPage",
          "description": "Fetch the raw Markdown for a single Langfuse docs page. Accepts a docs path (e.g., /docs/observability/overview) or a full https://langfuse.com URL. Returns the exact Markdown (may include front matter). Use when you need a specific page content (Integration, Features, API, etc.) or code samples. Prefer searchLangfuseDocs for broader questions where there is not one specific page about it.",
          "inputSchema": {
            "type": "object",
            "properties": {
              "pathOrUrl": {
                "type": "string",
                "description": "Docs path starting with \"/\" (e.g., /docs/observability/overview) or a full URL on https://langfuse.com. Do not include anchors (#...) or queries (?foo=bar) — they will be ignored."
              }
            },
            "required": [
              "pathOrUrl"
            ],
            "additionalProperties": false,
            "$schema": "http://json-schema.org/draft-07/schema#"
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "getLangfuseDocsPage",
              "arguments": {
                "pathOrUrl": "string"
              }
            }
          }
        },
        {
          "name": "getLangfuseOverview",
          "description": "Get a high-level, machine-readable index by downloading https://langfuse.com/llms.txt. Use this at the start of a session when needed to discover key docs endpoints or to seed follow-up calls to searchLangfuseDocs or getLangfuseDocsPage. Returns the plain text contents of llms.txt. Avoid repeated calls within the same session.",
          "inputSchema": {
            "type": "object",
            "properties": {},
            "additionalProperties": false,
            "$schema": "http://json-schema.org/draft-07/schema#"
          },
          "exampleRequest": {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "tools/call",
            "params": {
              "name": "getLangfuseOverview",
              "arguments": {}
            }
          }
        }
      ],
      "resources": [],
      "prompts": []
    }
  ]
}
