Skip to main content
Glama

createSiteFromGitHub

Deploy a Netlify site directly from a GitHub repository by specifying build commands, publish directory, and environment variables for automated hosting.

Instructions

Create a new Netlify site from a GitHub repository

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new site (will be used as subdomain)
repoYesGitHub repository in format owner/repo
branchNoBranch to deploy from (default: main)main
buildCommandYesBuild command to run (e.g., npm run build)
publishDirYesDirectory containing the built files to publish (e.g., dist, build)
envVarsNoEnvironment variables for the build process

Implementation Reference

  • The handler logic for the 'createSiteFromGitHub' tool. Validates input parameters, constructs the site creation payload for the Netlify API, makes a POST request to /sites, and returns the site details or throws appropriate MCP errors on failure.
    case 'createSiteFromGitHub': { const args = request.params.arguments as unknown as CreateSiteFromGitHubArgs; if (!args?.name || !args?.repo || !args?.buildCommand || !args?.publishDir) { throw new McpError( ErrorCode.InvalidParams, 'Missing required parameters: name, repo, buildCommand, and publishDir are required' ); } // Validate repo format if (!args.repo.match(/^[\w.-]+\/[\w.-]+$/)) { throw new McpError( ErrorCode.InvalidParams, 'Invalid repo format. Must be in format: owner/repo' ); } try { const siteData = { name: args.name, repo: { provider: 'github', repo: args.repo, branch: args.branch || 'main', cmd: args.buildCommand, dir: args.publishDir, }, }; // Add environment variables if provided if (args.envVars) { siteData.repo['env'] = args.envVars; } const response = await this.axiosInstance.post('/sites', siteData); return { content: [ { type: 'text', text: JSON.stringify({ success: true, site: { id: response.data.id, name: response.data.name, url: response.data.url, admin_url: response.data.admin_url, deploy_url: response.data.deploy_url, created_at: response.data.created_at, }, message: `Site created successfully! Visit ${response.data.admin_url} to manage it.`, }, null, 2), }, ], }; } catch (error) { if (axios.isAxiosError(error)) { throw new McpError( ErrorCode.InternalError, `Failed to create site: ${this.formatNetlifyError(error)}` ); } throw error; } }
  • src/index.ts:106-141 (registration)
    Tool registration in the ListTools handler, defining the name, description, and JSON inputSchema for 'createSiteFromGitHub'.
    { name: 'createSiteFromGitHub', description: 'Create a new Netlify site from a GitHub repository', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name for the new site (will be used as subdomain)', }, repo: { type: 'string', description: 'GitHub repository in format owner/repo', }, branch: { type: 'string', description: 'Branch to deploy from (default: main)', default: 'main', }, buildCommand: { type: 'string', description: 'Build command to run (e.g., npm run build)', }, publishDir: { type: 'string', description: 'Directory containing the built files to publish (e.g., dist, build)', }, envVars: { type: 'object', description: 'Environment variables for the build process', additionalProperties: { type: 'string' }, }, }, required: ['name', 'repo', 'buildCommand', 'publishDir'], }, },
  • TypeScript interface defining the shape of arguments for the createSiteFromGitHub handler, used for type assertion.
    interface CreateSiteFromGitHubArgs { name: string; repo: string; branch: string; buildCommand: string; publishDir: string; envVars?: Record<string, string>; }

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/MCERQUA/netlify-mcp'

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