JaanMCPs — Self-Hosted MCP Services

A collection of Model Context Protocol (MCP) services hosted on jaanmcps.ddns.net via IIS.

Gateway

Item Value
Host https://jaanmcps.ddns.net
Transport Streamable HTTP
SSL Let's Encrypt (auto-renews)
IIS Deployment C:\inetpub\wwwroot\mcps\<service-name>

Installed Services

pixel-art-generator

AI-powered pixel art and sprite generation using Ollama (local LLMs).

Item Value
Endpoint https://jaanmcps.ddns.net/mcps/pixel-art-generator/mcp/mcp
Type streamable-http
Docs https://jaanmcps.ddns.net/mcps/pixel-art-generator/docs
Source C:\Users\justi\OneDrive\Desktop\mcps\PixelArtGenerator
Repo tinyioda/PixelArtGenerator (private)
Stack Python 3.11, FastAPI, Ollama, MCP SDK

Tools:

Tool Description
generate_pixel_art AI-generate sprites from text prompts (supports JRPG/FF6 presets)
create_sprite Create from explicit pixel data
edit_sprite Modify regions of existing sprites
convert_to_pixel_art Convert any image to pixel art
export_sprite_sheet Export in different formats/scales

MCP Client Config:

{
  "pixel-art-generator": {
    "type": "streamable-http",
    "url": "https://jaanmcps.ddns.net/mcps/pixel-art-generator/mcp/mcp"
  }
}

Adding a New MCP Service

1. Create the service

Build your MCP server (any language/framework). It must expose a Streamable HTTP or SSE transport endpoint.

2. Deploy to IIS

# Copy built app to deployment folder
$name = "my-new-mcp"
robocopy .\source "C:\inetpub\wwwroot\mcps\$name" /E /XD .git __pycache__

# Create app pool and IIS sub-application
appcmd add apppool /name:"mcps-$name"
appcmd set apppool "mcps-$name" /processModel.identityType:LocalSystem
appcmd add app /site.name:"JaanMCPs" /path:/mcps/$name /physicalPath:"C:\inetpub\wwwroot\mcps\$name" /applicationPool:"mcps-$name"

3. Configure web.config

Each service needs a web.config in its deployment folder with HttpPlatformHandler configured for its runtime (Python, Node, .NET, etc.).

Example for Python/FastAPI:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*"
           modules="httpPlatformHandler" resourceType="Unspecified"
           responseBufferLimit="0" />
    </handlers>
    <httpPlatform processPath="C:\Program Files\Python311\python.exe"
                  arguments="run_iis.py"
                  startupTimeLimit="120"
                  requestTimeout="00:05:00">
      <environmentVariables>
        <environmentVariable name="APP_PREFIX" value="/mcps/my-new-mcp" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

4. Register in MCP clients

Add to ~/.copilot/mcp.json and/or ~/.vscode/mcp.json:

{
  "my-new-mcp": {
    "type": "streamable-http",
    "url": "https://jaanmcps.ddns.net/mcps/my-new-mcp/mcp/mcp"
  }
}

5. Verify

curl -sk "https://jaanmcps.ddns.net/mcps/my-new-mcp/mcp/mcp" -X POST `
  -H "Content-Type: application/json" `
  -H "Accept: application/json, text/event-stream" `
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Architecture

jaanmcps.ddns.net (IIS - JaanMCPs site)
├── /mcps/pixel-art-generator  →  C:\inetpub\wwwroot\mcps\pixel-art-generator
├── /mcps/<future-service>     →  C:\inetpub\wwwroot\mcps\<future-service>
└── ...

Each service runs in its own IIS application pool (isolated process). The gateway handles SSL termination and host-header routing.

System Requirements