Contex
Converts any OpenAPI 3.x specification into a fully functional MCP server with OAuth 2.1 support and a purely functional architecture.
README
Contex - OpenAPI to Model Context Protocol Server
A generic TypeScript library for converting OpenAPI specifications into MCP (Model Context Protocol) servers. Built with a purely functional architecture using Ramda.
Features
- Generic OpenAPI Conversion: Convert any OpenAPI 3.x specification into a fully functional MCP server
- OAuth 2.1 Support: Built-in authentication with PKCE support
- Purely Functional: Composable pure functions using Ramda and
R.pipe() - Type-Safe: Full TypeScript support with Result monad for error handling
- Extensible: Easy to add custom tools and resources
- Well-Tested: 100% unit test coverage target
Installation
npm install contex zod
Quick Start
import { createMcpServer, isOk } from 'contex';
const result = await createMcpServer({
name: 'My API Server',
version: '1.0.0',
openApiSpec: './openapi.yaml',
baseUrl: 'https://api.example.com',
});
if (isOk(result)) {
await result.value.start();
console.log('MCP server running on port 3000');
}
With OAuth Authentication
import { createMcpServer, isOk } from 'contex';
const result = await createMcpServer({
name: 'Secure API Server',
version: '1.0.0',
openApiSpec: './openapi.yaml',
baseUrl: 'https://api.example.com',
auth: {
type: 'oauth2',
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
authorizationUrl: 'https://auth.example.com/authorize',
tokenUrl: 'https://auth.example.com/token',
scopes: ['read', 'write'],
pkce: true, // Enabled by default
},
server: {
port: 3000,
transport: 'streamable-http',
},
});
if (isOk(result)) {
await result.value.start();
}
API Overview
Main Functions
createMcpServer(config)- Create MCP server from OpenAPI speccreateCustomMcpServer(name, version, tools, resources)- Create server with custom tools
Result Type
The library uses a Result<T, E> monad for error handling:
import { isOk, isErr, fold, formatError } from 'contex';
const result = await createMcpServer(config);
// Pattern matching with type guards
if (isOk(result)) {
const server = result.value;
} else {
console.error(formatError(result.error));
}
// Or use fold
const server = fold(
(error) => { console.error(error); return null; },
(server) => server
)(result);
Tool and Resource Generation
import {
parseOpenApiSpec,
extractOperations,
buildToolsPipeline,
buildResourcesPipeline,
} from 'contex';
// Parse OpenAPI spec
const specResult = await parseOpenApiSpec('./openapi.yaml');
if (isOk(specResult)) {
const spec = specResult.value;
// Extract operations
const operations = extractOperations(spec);
// Build tools
const tools = buildToolsPipeline('https://api.example.com')(operations);
// Build resources
const resources = buildResourcesPipeline(spec);
}
Architecture
See docs/ARCHITECTURE.md for details.
Documentation
- API Reference - Complete API documentation
- Architecture Guide - Design principles and patterns
- Examples - Usage examples and patterns
Examples
See the examples/ directory for complete examples:
basic-server.ts- Basic MCP server from OpenAPIwith-oauth.ts- Server with OAuth authenticationcustom-tools.ts- Server with custom tool definitions
Existing Alternatives
Several similar libraries exist in the ecosystem:
| Library | Description |
|---|---|
| openapi-mcpserver-generator | Generates MCP server code from OpenAPI specs |
| openapi-mcp-generator | TypeScript tool for OpenAPI → MCP conversion |
| openapi-to-mcp-converter | Automatic OpenAPI to MCP Server conversion |
| openapi-mcp-server | Bridge between OpenAPI and MCP for Claude Desktop |
| api-to-mcp | Turn any API into MCP tools |
| Stainless | Commercial platform for MCP server generation |
| Speakeasy | Commercial tool for generating MCP servers |
How This Library Differs
| Feature | Existing Tools | This Library |
|---|---|---|
| Architecture | Mostly imperative/OOP | Purely functional |
| Error Handling | Exceptions | Result monad |
| OAuth Support | Limited/varies | Full OAuth 2.1 + PKCE |
| Runtime | Code generation | Runtime conversion |
| Composability | Low | High (R.pipe) |
Development
# Install dependencies
npm install
# Run tests
npm test
# Type check
npm run typecheck
# Build
npm run build
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.