Skip to content

API Reference

Programmatic API for GitHub to MCP.

Installation

npm install @nirholas/github-to-mcp

Packages

Package Description
@nirholas/github-to-mcp Core conversion library
@github-to-mcp/openapi-parser OpenAPI/GraphQL parser
@github-to-mcp/mcp-server MCP server implementation

Quick Start

import { generateFromGithub } from '@nirholas/github-to-mcp';

// Generate from a GitHub URL
const result = await generateFromGithub('https://github.com/stripe/stripe-node');

// Access generated tools
console.log(`Generated ${result.tools.length} tools`);
result.tools.forEach(tool => {
  console.log(`- ${tool.name}: ${tool.description}`);
});

// Save to disk
await result.save('./my-mcp-server');

// Or get the code directly
const code = result.toTypeScript();

Core Functions

generateFromGithub

Main function to generate MCP server from a repository.

import { generateFromGithub, type GeneratorOptions } from '@nirholas/github-to-mcp';

const options: GeneratorOptions = {
  token: process.env.GITHUB_TOKEN,
  language: 'typescript',
  includeUniversalTools: true,
};

const result = await generateFromGithub(
  'https://github.com/owner/repo',
  options
);

parseRepository

Parse a repository without generating code.

import { parseRepository } from '@nirholas/github-to-mcp';

const info = await parseRepository('https://github.com/owner/repo');
console.log(info.type);        // 'api-sdk' | 'mcp-server' | etc.
console.log(info.tools);       // Extracted tool definitions
console.log(info.metadata);    // Repo metadata

createMcpServer

Create an MCP server instance from tools.

import { createMcpServer } from '@nirholas/github-to-mcp';

const server = createMcpServer({
  name: 'my-server',
  tools: [...],
  transport: 'stdio',  // or 'http'
});

await server.start();

Type Definitions

interface GeneratorOptions {
  token?: string;
  language?: 'typescript' | 'python';
  includeTools?: string[];
  excludeTools?: string[];
  includeUniversalTools?: boolean;
  extractFromOpenAPI?: boolean;
  extractFromGraphQL?: boolean;
  extractFromCode?: boolean;
  extractFromReadme?: boolean;
  maxDepth?: number;
  maxFileSize?: number;
  timeout?: number;
}

interface GeneratorResult {
  tools: Tool[];
  metadata: RepositoryMetadata;
  save(path: string): Promise<void>;
  toTypeScript(): string;
  toPython(): string;
}

interface Tool {
  name: string;
  description: string;
  inputSchema: JSONSchema;
  source: 'universal' | 'openapi' | 'graphql' | 'code' | 'readme';
}

See Also