← All materials
Demo 1

MCP Aggregator

GitLab + YouTrack through one Streamable HTTP endpoint

MCP URL

Public workshop endpoint — requires a shared bearer token:

pass from mcp : GWUWNVwuueEi

GitLab demo

URL
gitlab-demo.infiano.app
User
root
Pass
94dc3248a25c8e4af33159e1361d7cd7418dd940e2d0d3d7

YouTrack demo

URL
youtrack-demo.infiano.app
User
admin
Pass
sabnod-5tomwa-pUmhob
How to connect

Claude (UI)

  1. Customize → Connectors → Add URL
  2. Paste MCP URL above
  3. Add header Authorization: Bearer GWUWNVwuueEi

Claude Code (CLI)

Add:

claude mcp add --transport http workshop https://mcp-demo.infiano.app/mcp \ --header "Authorization: Bearer GWUWNVwuueEi"

Remove:

claude mcp remove workshop

Verify: claude mcp list or run /mcp in Claude Code

ChatGPT

  1. Settings → Connectors → Add connector
  2. Paste MCP URL above
  3. Add header Authorization: Bearer GWUWNVwuueEi

Codex (CLI)

codex mcp add workshop --url https://mcp-demo.infiano.app/mcp \ --header "Authorization: Bearer GWUWNVwuueEi"

Try: "Find bugs in the projects"

Documentation — aggregator, setup & deployment

MCP aggregator

This project exposes GitLab and YouTrack through one MCP connector. Clients register a single Streamable HTTP endpoint and receive the combined tool catalog:

  • GitLab tools are named gitlab__<tool>
  • YouTrack tools are named youtrack__<tool>

The prefixes prevent collisions and let the aggregator route each tools/call request to the correct upstream.

The aggregator creates authenticated upstream MCP sessions. GitLab and YouTrack tokens stay in .env and are never exposed to MCP clients.

Architecture

Service Address Purpose
Public gateway https://mcp-demo.infiano.app/mcp Combined GitLab + YouTrack MCP endpoint for the workshop
mcp-connectors 127.0.0.1:9100/mcp Combined GitLab and YouTrack MCP endpoint
mcp-connectors 127.0.0.1:9100/health Upstream health status
gitlab-mcp Docker network only GitLab MCP upstream
YouTrack Server https://youtrack-demo.infiano.app/mcp Native YouTrack MCP upstream

The public virtual host exposes only /mcp and /health. Internal upstream proxy and diagnostic routes are not published.

Configuration

Start from .env.example. Required settings:

  • MCP_AGGREGATOR_PORT — localhost port for the combined endpoint; defaults to 9100
  • MCP_AGGREGATOR_TOKEN — optional shared secret for the public /mcp endpoint. When set, clients must send Authorization: Bearer <token>; when empty the endpoint stays open
  • GITLAB_API_URL and GITLAB_PERSONAL_ACCESS_TOKEN
  • GITLAB_READ_ONLY_MODE, USE_PIPELINE, USE_GITLAB_WIKI, USE_MILESTONE
  • YOUTRACK_BASE_URL and YOUTRACK_PERMANENT_TOKEN
  • INTERNAL_YOUTRACK_MCP_URL — normally ${YOUTRACK_BASE_URL}/mcp

Run locally

Code + README in workshop/mcp

docker compose up -d --build

Check the stack:

curl http://127.0.0.1:9100/health curl http://127.0.0.1:9100/mcp/summary curl http://127.0.0.1:9100/mcp/servers/public

Deployment

Deployment manifests are kept separately:

  • deployment/gitlab/docker-compose.yml — pinned GitLab CE. HTTP at 127.0.0.1:8086, Git SSH on port 2224. Data under /opt/gitlab.
  • deployment/youtrack/docker-compose.yml — pinned YouTrack Server. Native MCP requires YouTrack Server 2025.3+ and a permanent token with the YouTrack scope.

Start from the deployment directory:

cd deployment/gitlab docker compose up -d