#
tokens: 1722/50000 7/7 files
lines: off (toggle) GitHub
raw markdown copy
# Directory Structure

```
├── .gitignore
├── glama.json
├── icon.png
├── LICENSE
├── manifest.json
├── package-lock.json
├── package.json
├── README.md
├── src
│   └── server.js
├── tsconfig.json
└── website-generator-mcp-server.dxt
```

# Files

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
node_modules/
dist/

```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
# @b12/website-generator-mcp-server
B12's model context protocol server for generating websites with AI

<a href="https://glama.ai/mcp/servers/@b12io/website-generator-mcp-server">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/@b12io/website-generator-mcp-server/badge" alt="Website Generator MCP server" />
</a>

## Usage with Claude Desktop

### Prerequisites

-   NodeJS
-   MCP Client (like Claude Desktop App)

### Installation

To use this server with the Claude Desktop app, add the following configuration to the "mcpServers" section of your `claude_desktop_config.json`:

```json
{
    "mcpServers": {
        "b12": {
            "command": "npx",
            "args": ["-y", "@b12/website-generator-mcp-server"]
        }
    }
}
```
****
```

--------------------------------------------------------------------------------
/glama.json:
--------------------------------------------------------------------------------

```json
{
  "$schema": "https://glama.ai/mcp/schemas/server.json",
  "maintainers": [
    "thisisdhaas",
    "adbharadwaj",
    "zhadaev"
  ]
}

```

--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------

```json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "moduleResolution": "Node16",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": [
    "src/**/*",
    "server.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

```

--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "@b12/website-generator-mcp-server",
  "version": "1.0.3",
  "description": "Website generator MCP server by b12.io",
  "main": "dist/server.js",
  "files": ["dist"],
  "bin": {
    "b12-mcp-server": "dist/server.js"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.7.0"
  },
  "scripts": {
    "start": "node server.js",
    "build": "tsc && shx chmod +x dist/*.js"
  },
  "author": "b12io",
  "license": "Apache-2.0",
  "devDependencies": {
    "@types/node": "^22.13.14",
    "shx": "^0.4.0",
    "typescript": "^5.8.2"
  }
}

```

--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------

```json
{
  "dxt_version": "0.1",
  "name": "website-generator",
  "display_name": "B12 Website Generator",
  "version": "1.0.3",
  "description": "Create a website in seconds! Generate, design, write code, and write copy for your website. Powered by B12. Contact: [email protected]",
  "long_description": "This extension allows you to create a professional, engaging, and user-friendly website in seconds using AI. To create a website, you need to provide a name for your project/business, along with a description of the project/business (goals, structure, etc.).",
  "author": {
    "name": "B12.io",
    "email": "[email protected]",
    "url": "https://b12.io/"
  },
  "homepage": "https://b12.io/",
  "icon": "icon.png",
  "server": {
    "type": "node",
    "entry_point": "src/server.js",
    "mcp_config": {
      "command": "node",
      "args": [
        "${__dirname}/src/server.js"
      ],
      "env": {}
    }
  },
  "tools": [
    {
      "name": "generate_website",
      "description": "Generates a website from a business/project name and short description, then presents a link (in markdown format) to sign up and see the website."
    }
  ],
  "keywords": [
    "website",
    "business",
    "marketing",
    "write code",
    "write copy",
    "site"
  ],
  "license": "Apache-2.0"
}

```

--------------------------------------------------------------------------------
/src/server.js:
--------------------------------------------------------------------------------

```javascript
#!/usr/bin/env node

import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js'

const server = new Server(
  {
    name: 'b12-website-generator',
    version: '0.1.0',
  },
  {
    capabilities: {
      tools: {},
    },
  },
)

const WEBSITE_GENERATION_TOOL = {
  name: 'generate_website',
  // Make sure the description is in sync with tool description in manifest.json
  description: 'Generates a website from a business/project name and short description, then presents a link (in markdown format) to sign up and see the website.',
  annotations: {
    readOnlyHint: false,
    destructiveHint: false,
    idempotentHint: false,
    openWorldHint: true,
    title: 'Generate Website',
  },
  inputSchema: {
    type: 'object',
    properties: {
      name: {
        type: 'string',
        description: 'The name of the business.'
      },
      description: {
        type: 'string',
        description: 'The short description of the business in less than 1000 characters.'
      },
    },
    required: ['name', 'description']
  }
}

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [WEBSITE_GENERATION_TOOL],
}))

server.setRequestHandler(CallToolRequestSchema, request => {
  try {
    const { name: toolName, arguments: args } = request.params

    if (!args) {
      throw new Error('Business name and description are not provided')
    }

    if (toolName === 'generate_website') {
      const { name, description } = args
      return {
        content: [{
          type: 'text',
          text: `https://b12.io/signup/?utm_medium=chat&utm_source=mcp-server&intent=ai-websites&utm_content=website-generator&business_name=${encodeURIComponent(String(name))}&business_description=${encodeURIComponent(String(description))}`
        }],
        isError: false,
      }
    }
    return {
      content: [{ type: 'text', text: `Unknown tool: ${toolName}` }],
      isError: true,
    }
  } catch (error) {
    return {
      content: [
        {
          type: 'text',
          text: `Error: ${error instanceof Error ? error.message : String(error)}`,
        },
      ],
      isError: true,
    }
  }
})

async function runServer() {
  const transport = new StdioServerTransport()
  await server.connect(transport)
  console.error('B12 Website generator MCP Server running on stdio')
}

runServer().catch((error) => {
  console.error('Fatal error running server:', error)
  process.exit(1)
})

```