Skip to main content
Glama
xavierxmorris

containerized-mcp-streamable-http

Containerized MCP Streamable HTTP

A minimal, standalone TypeScript MCP server that runs in a local container and connects to GitHub Copilot over stateless, JSON-only Streamable HTTP.

It exposes:

  • POST /mcp: MCP messages over Streamable HTTP with JSON responses

  • GET /health: process and container health

  • echo: returns validated text unchanged

  • server_info: returns the standalone server name, version, and transport

GET /mcp and every other non-POST method intentionally return 405 Method Not Allowed. The server has no stdio transport, legacy HTTP+SSE transport, SSE response stream, or MCP sessions.

Architecture

flowchart LR
    C["GitHub Copilot Desktop / CLI<br/>MCP client"]
    L["127.0.0.1:3000<br/>host loopback only"]
    D["Local Docker or Podman container<br/>0.0.0.0:3000 internally"]
    H["GET /health"]
    M["POST /mcp<br/>Streamable HTTP (JSON-only)<br/>stateless"]
    T["echo<br/>server_info"]

    C -->|"type: http"| L
    L --> D
    D --> H
    D --> M
    M --> T

Related MCP server: Homelab MCP starter

Versions

The direct dependencies are pinned to versions used by the source example on 2026-08-07:

Component

Version

Node.js container image

24.13.0

@modelcontextprotocol/sdk

1.30.0

express

5.2.1

zod

4.4.3

typescript

7.0.2

vitest

4.1.10

Primary references, accessed 2026-08-07:

Install and test

Requires Node.js 24 or later:

npm ci
npm run lint
npm test
npm run build

Run without a container:

npm start

The local process defaults to 127.0.0.1:3000. The container sets HOST=0.0.0.0 internally so published ports work.

Build and run with Docker

docker build -t containerized-mcp-streamable-http .
docker run --rm -d --name containerized-mcp-streamable-http \
  -p 127.0.0.1:3000:3000 containerized-mcp-streamable-http
curl http://127.0.0.1:3000/health
docker stop containerized-mcp-streamable-http

Build and run with Podman

podman build -t containerized-mcp-streamable-http .
podman run --rm -d --name containerized-mcp-streamable-http \
  -p 127.0.0.1:3000:3000 containerized-mcp-streamable-http
curl http://127.0.0.1:3000/health
podman stop containerized-mcp-streamable-http

Publishing to 127.0.0.1 is deliberate. This unauthenticated demonstration is not exposed on other host interfaces.

Configure GitHub Copilot Desktop or CLI

The committed .github/mcp.json is the supported shared repository configuration. Open this trusted repository in a local Copilot Desktop/App project or start Copilot CLI from its root after the container is running.

For portable user configuration, add the same server to ~/.copilot/mcp-config.json. If COPILOT_HOME is set, use $COPILOT_HOME/mcp-config.json instead:

{
  "mcpServers": {
    "containerized-mcp-streamable-http": {
      "type": "http",
      "url": "http://127.0.0.1:3000/mcp",
      "tools": ["echo", "server_info"]
    }
  }
}

The type must be http, which selects Streamable HTTP. Do not configure sse, stdio, or local.

The supported CLI command is:

copilot mcp add --transport http --tools echo,server_info \
  containerized-mcp-streamable-http http://127.0.0.1:3000/mcp

Inside Copilot CLI, verify discovery:

/mcp show containerized-mcp-streamable-http

Then ask Copilot:

Use the containerized-mcp-streamable-http server_info tool and show its exact result.
Use the containerized-mcp-streamable-http echo tool with exactly "hello MCP".

Expected results:

{"name":"containerized-mcp-streamable-http","version":"1.0.0","transport":"Streamable HTTP (JSON-only)"}
hello MCP

Start a new desktop project session after adding or changing MCP configuration; an already-running session may not reload its tool catalog. If MCP content is blocked by an administrator, the organization or enterprise MCP policy and allowlist must permit this server.

Evidence

The source implementation from which this standalone repository was extracted was verified on 2026-08-07 with MCP SDK 1.30.0, six passing tests, Docker, and a fresh GitHub Copilot Desktop-managed session. That Desktop session listed and invoked both tools; echo("desktop-app-client-ok") returned desktop-app-client-ok.

This standalone repository changes the package/server name and makes the transport label explicit. On 2026-08-07, the extraction passed npm ci, type-check lint, all six tests, and the TypeScript build. Its Docker image was built and run on 127.0.0.1:3000; HTTP checks and the official MCP SDK client confirmed initialization, tool listing, both tool calls, JSON responses, no session ID, and 405 responses for unsupported methods. Podman was not installed in the validation environment. No fresh Desktop test was performed against the standalone repository, so the source Desktop result remains prior evidence.

See DEMO.md for a presenter-focused walkthrough.

Production boundary

This is a local demonstration, not a production deployment. A production or shared MCP server requires HTTPS, authentication and authorization (typically OAuth), deployment-specific Origin validation, managed secrets, network access restrictions, and a narrow tool allowlist. Enterprise GitHub Copilot MCP policy and registry/allowlist controls must also permit the server. Never put credentials in MCP configuration files.

Current upstream advisories

On 2026-08-07, a clean npm ci followed by npm audit reports five affected package entries: three high and two moderate. They trace to two transitive advisories in the MCP SDK 1.30.0 dependency graph:

No compatible patched release is currently available: 3.1.4 is the latest fast-uri 3.x release accepted by the dependency graph, and 4.12.32 is the latest Hono release while its advisory names 4.12.34 as patched. The only automatic action offered by npm is a breaking downgrade of @modelcontextprotocol/sdk from 1.30.0 to 1.25.3. This example retains the required SDK version. Re-run npm audit and update patched transitive releases before production use.

License

No license is included. The source repository does not contain an applicable license file for this extraction, so no license was invented. Copyright law applies by default.

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    D
    maintenance
    A simple Model Context Protocol (MCP) server that allows GitHub Copilot to access custom tools, including an example tool to return the author name.
    MIT
  • F
    license
    -
    quality
    B
    maintenance
    A minimal MCP server for homelab environments, providing demo tools like ping and echo over Streamable HTTP for testing client-server integration.
  • A
    license
    A
    quality
    A
    maintenance
    A minimal MCP server that provides health/status checks and multilingual greetings via the server_info and greet tools.
    2
    MIT

View all related MCP servers

Related MCP Connectors

  • An MCP server that gives your AI access to the source code and docs of all public github repos

  • An MCP server for Arcjet - the runtime security platform that ships with your AI code.

  • Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer

View all MCP Connectors

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/xavierxmorris/containerized-mcp-streamable-http'

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