Skip to main content
Glama
frontal-labs

Frontal MCP Server

Official
by frontal-labs

Frontal MCP Server

Frontal Banner

A standalone Model Context Protocol (MCP) server for the Frontal public API (api.frontal.dev). It exposes the API as a hybrid of curated, typed tools for the highest-value surfaces (ontology / knowledge graph and the data platform) plus spec-driven generic meta-tools that can reach any of the API's ~430 operations — all driven by the vendored OpenAPI spec.

Quick Start

Installation

# Install globally
npm install -g @frontal-labs/mcp-server

# Or install locally
npm install @frontal-labs/mcp-server

Basic Setup

  1. Get your API key from Frontal Platform

  2. Set up environment:

export FRONTAL_API_KEY="your_api_key_here"
  1. Start the server:

# For Claude Desktop (stdio transport)
frontal-mcp-server --transport stdio

# For web applications (HTTP transport)
frontal-mcp-server --transport http --port 3000

Claude Desktop Integration

Add to your Claude Desktop configuration:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "frontal": {
      "command": "frontal-mcp-server",
      "args": ["--transport", "stdio"],
      "env": {
        "FRONTAL_API_KEY": "your_api_key_here"
      }
    }
  }
}

Related MCP server: poly-git-mcp

Features

  • Full API coverage: Generic meta-tools drive any endpoint from the vendored OpenAPI spec (api.frontal.dev, ~430 operations).

  • Curated tools: First-class, typed tools for the ontology / knowledge-graph and data-platform surfaces.

  • Edge-aware client: Bearer frt_ auth, cursor pagination, 429/Retry-After backoff, the edge retry matrix (retry 429/502/503/504, never 401/409/501), idempotency keys on retried writes, and region pinning.

  • Multi-transport: stdio (local / Claude Desktop) and Streamable HTTP, with per-request Authorization for multi-tenant hosting.

  • Type safe: TypeScript throughout with Zod-validated tool inputs.

  • Monitoring: Optional incident.io status-page integration and structured logging.

Available Tools

Tools are grouped into tool sets selectable via FRONTAL_TOOLSETS.

Generic (spec-driven) — generic

  • frontal_list_endpoints: Browse the API surface, filtered by tag/search.

  • frontal_describe_endpoint: Full parameter/body/response detail for one operation.

  • frontal_call_endpoint: Invoke any operation by operationId (or method + path), with optional auto-pagination.

Ontology (curated) — ontology

ontology_list_objects, ontology_get_object, ontology_list_object_types, ontology_list_relationships, ontology_query_graph, ontology_graph_neighborhood, ontology_graph_path, ontology_extract_entities, ontology_list_schemas, ontology_get_schema.

Data platform (curated) — data

data_query_federated, data_list_datasets, data_get_dataset, data_list_pipelines, data_create_pipeline, data_get_pipeline, data_list_pipeline_runs, data_get_pipeline_run, data_ingest_dataset, data_list_streams, data_list_schemas.

Everything not covered by a curated tool stays reachable via the generic tools.

Configuration

Environment Variables

Variable

Description

Default

Required

FRONTAL_API_KEY

Frontal API key (frt_...). Used by stdio only; never a fallback for HTTP

-

For stdio

FRONTAL_BASE_URL

API base URL (bare host; /v1/ is in the paths)

https://api.frontal.dev

No

FRONTAL_REGION

Region pin (x-frontal-region, e.g. iad, lhr, fra, sin)

-

No

FRONTAL_TOOLSETS

Comma-separated tool sets to register (invalid values are rejected)

generic,ontology,data

No

FRONTAL_HTTP_ALLOWED_ORIGINS

Comma-separated CORS allowlist for the HTTP transport

- (no origin trusted)

No

MCP_LOG_LEVEL

Log level

info

No

Over the HTTP transport, every MCP request must send a per-request Authorization: Bearer frt_... header (multi-tenant hosting); MCP requests without one are rejected with 401. The unauthenticated GET /health endpoint is the one exception: it always returns 200 {"status":"ok"} without a token. The FRONTAL_API_KEY env key is used only by the stdio transport and is never applied to HTTP requests. CORS trusts no origin by default: responses only carry Access-Control-Allow-Origin for origins listed in FRONTAL_HTTP_ALLOWED_ORIGINS (never *).

CLI Options

frontal-mcp-server [options]

Options:
  -t, --transport <type>     Transport type (stdio|http) [default: "stdio"]
  -p, --port <number>        HTTP port (for http transport) [default: 3000]
  -h, --host <address>       HTTP host (for http transport) [default: "localhost"]
  -k, --api-key <key>        Frontal API key
  -c, --config <path>         Configuration file path
  -v, --verbose              Verbose logging
  --log-level <level>        Log level (error|warn|info|debug) [default: "info"]

Usage Examples

Basic Usage

# Start with stdio transport (for Claude Desktop)
FRONTAL_API_KEY=your_key ./dist/bin/frontal-mcp-server.js

# Start with HTTP transport for web integration
FRONTAL_API_KEY=your_key ./dist/bin/frontal-mcp-server.js --transport http --port 3000

# Register only specific tool sets
FRONTAL_TOOLSETS=generic,data FRONTAL_API_KEY=your_key ./dist/bin/frontal-mcp-server.js

Programmatic Usage

import { FrontalMcpServer, createLogger } from '@frontal-labs/mcp-server';

import { createConfig } from '@frontal-labs/mcp-server';

const config = createConfig({
  apiKey: 'frt_your_api_key',
  toolsets: ['generic', 'ontology', 'data'],
  transport: { transport: 'stdio' },
});

const logger = createLogger({ level: 'info' });
const server = new FrontalMcpServer(config, logger);

await server.initialize();
await server.connectStdio();

Architecture

The server is a thin, spec-driven layer over the Frontal public API:

  1. Vendored OpenAPI spec (openapi/public.v1.json) indexed at startup — the source of truth for endpoints, params, and auth.

  2. Frontal client (src/clients/frontal-client.ts) — an edge-aware fetch client (auth, pagination, retry matrix, idempotency, region pin, errors).

  3. Tool adapters — a generic (meta-tool) adapter plus curated ontology/data adapters, gated by FRONTAL_TOOLSETS.

  4. Transport layer — stdio and Streamable HTTP, the latter binding a per-request bearer token via AsyncLocalStorage.

See ARCHITECTURE.md for details.

Development

Project Structure

mcp-server/
├── src/
│   ├── adapters/          # Service adapters for each Frontal service
│   ├── config/            # Configuration management
│   ├── server/            # Core MCP server implementation
│   ├── utils/             # Utilities (logging, etc.)
│   └── bin/               # CLI entry point
├── tests/                 # Test files
├── docs/                  # Documentation
└── examples/              # Integration examples

Scripts

# Build the project
bun run build

# Run tests
bun run test

# Run tests in watch mode
bun run test:watch

# Generate coverage report
bun run test:coverage

# Lint code
bun run lint

# Format code
bun run format

# Type check
bun run type-check

Current Status

Completed:

  • Spec-driven integration against the real api.frontal.dev OpenAPI contract (vendored + refreshable via bun run sync-spec).

  • Generic meta-tools (full coverage) + curated ontology/data tools.

  • Edge-aware client (auth, pagination, retry matrix, idempotency, region pin).

  • stdio and Streamable HTTP transports, per-request auth over HTTP.

  • Test suite and CI (lint, type-check, coverage, build) plus Fly.io deploy.

Planned:

  • Curated tools for more surfaces (events, webhooks, integrations, workflows, billing) — reachable today via the generic tools.

  • MCP resources/prompts and optional OAuth flows.

Contributing

We welcome contributions! Please see our Developer Guide for detailed information.

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Run tests: bun run test

  5. Submit a pull request

Documentation

Troubleshooting

Common Issues

Server won't start:

# Check API key
echo $FRONTAL_API_KEY

# Validate configuration
frontal-mcp-server --validate-config

Connection issues:

# Test with different transport
frontal-mcp-server --transport http --port 3000

# Check logs
frontal-mcp-server --verbose

Performance issues:

# Enable debug logging
MCP_LOG_LEVEL=debug frontal-mcp-server

# Monitor resources
top -p $(pgrep frontal-mcp-server)

Getting Help

  • GitHub Issues: Report bugs and request features

  • Discord Community: Join our developer community

  • Documentation: Check docs/ for detailed guides

License

Apache License 2.0 - see LICENSE file for details.

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
4moRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A modular MCP server that provides a unified interface for interacting with GitHub and GitLab, including enterprise and self-hosted instances. It enables comprehensive management of repositories, issues, pull requests, and CI/CD pipelines through natural language.
    Last updated
    23
    58
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    Enables managing GitHub repositories, files, and user information through MCP, with support for creating, updating, and deleting repository contents, as well as fetching user profiles.
    Last updated
    1

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

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/frontal-labs/mcp-server'

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