Unified Agent Context System
Provides Prometheus-compatible metrics for monitoring the MCP server's health, sessions, tool invocations, and HTTP requests.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Unified Agent Context Systemshow my portfolio profile"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Unified Agent Context System (MCP)
Unified Agent Context System to dedykowana warstwa kontekstowa oparta o Model Context Protocol. Łączy portfolio, notatki, narzędzia diagnostyczne i obserwowalność w jeden serwer MCP, który może zasilać agentów AI uporządkowanymi danymi z kilku domen.
Spis Treści
Related MCP server: mcpdeployment
Możliwości
Obszar | Rola w systemie |
Warstwa MCP | Jeden punkt dostępu do narzędzi kontekstowych dla agentów AI. |
Moduły domenowe | Osobne moduły dla portfolio, Trilium i narzędzi diagnostycznych. |
Transport HTTP | Streamable HTTP z sesjami MCP pod |
Bezpieczeństwo | Bearer token wymagany dla ścieżek MCP. |
Observability | Health checks, request IDs i metryki Prometheus dla pracy serwera. |
Portfolio | Strukturalny dostęp do profilu, projektów, umiejętności, doświadczenia i kursów. |
Trilium | Dostęp do notatek, drzewa wiedzy i zapisu treści przez ETAPI. |
Środowiska | Podział pracy między środowisko produkcyjne dla portfolio i homelab dla Trilium. |
Test tools | Moduł kontrolny do diagnostyki rejestracji narzędzi. |
Rola Narzędzia
System pełni rolę dedykowanej warstwy kontekstowej dla agentów AI, ale pozostaje zorganizowany jak pełnoprawny serwer produkcyjny: ma moduły, izolację transportu, metryki, health checks i jawne kontrakty narzędzi. Zamiast trzymać kontekst w jednym dużym promptcie, wystawia go jako zestaw narzędzi MCP z czytelnymi namespace'ami.
Najważniejsze scenariusze:
prezentowanie danych portfolio przez narzędzia
portfolio_*,wyszukiwanie i filtrowanie treści z lokalnego korpusu Markdown,
pobieranie i zapisywanie notatek Trilium przez
trilium_*,wystawienie modułów przez HTTP dla agentów lub środowisk zdalnych,
monitorowanie działania przez
/healthzi/metrics.
Adres modułu w transporcie HTTP ma postać:
http://127.0.0.1:3333/mcp/<moduleId>Przykłady: /mcp/portfolio, /mcp/trilium, /mcp/test-tools.
Środowiska
Serwer jest projektowany jako jedna warstwa MCP działająca w dwóch kontekstach operacyjnych:
Środowisko | Moduł | Rola |
Produkcyjne |
| Publiczna warstwa danych portfolio, projektów, umiejętności, doświadczenia i kursów. |
Homelab |
| Integracja z prywatną bazą wiedzy Trilium przez ETAPI. |
Moduł trilium jest rozwijany na branchu feat/trilium-integration.
Architektura
flowchart LR
Entry["src/index.ts"] --> Config["config/modules.config.ts"]
Entry --> HTTP["startHttpTransport()"]
HTTP --> Route["/mcp/:moduleId"]
Route --> Registry["ToolRegistry"]
Registry --> Portfolio["portfolio module"]
Registry --> Trilium["trilium module"]
Registry --> TestTools["test-tools module"]
Portfolio --> PortfolioTools["portfolio_* tools"]
Trilium --> TriliumTools["trilium_* tools"]
TestTools --> TestToolsTools["test_* tools"]
HTTP --> Health["/healthz"]
HTTP --> Metrics["/metrics"]Główne warstwy:
Warstwa | Lokalizacja | Odpowiedzialność |
Core |
| Tworzenie |
Transporty |
| HTTP jako domyślna ścieżka uruchomienia oraz alternatywny transport stdio. |
Moduły |
| Domenowe zestawy narzędzi MCP. |
Observability |
| Health checks, metryki Prometheus, instrumentacja narzędzi. |
Config |
| Flagi |
Przepływ Sesji HTTP
sequenceDiagram
participant Client as MCP client
participant HTTP as HTTP transport
participant Config as modules.config
participant Registry as ToolRegistry
participant Module as Module tools
Client->>HTTP: POST /mcp/:moduleId initialize
HTTP->>Config: getEnabledModuleByName(moduleId)
Config-->>HTTP: ModuleConfig
HTTP->>Registry: build McpServer for module
Registry->>Module: register(server, options)
HTTP-->>Client: mcp-session-id
Client->>HTTP: POST/GET/DELETE with mcp-session-id
HTTP->>Module: handle MCP requestW HTTP moduleId pochodzi ze ścieżki URL, np. /mcp/portfolio. Namespace narzędzi jest osobną wartością konfiguracyjną, np. PORTFOLIO_NAMESPACE=portfolio, i wpływa na nazwy narzędzi typu portfolio_get_profile.
Transporty
Transport | Status | Plik | Zastosowanie |
Streamable HTTP | Domyślny |
| Serwer dla agentów zdalnych, VPS, reverse proxy i klientów MCP obsługujących HTTP. |
stdio | Alternatywny |
| Klienci spawnujący proces Node i komunikujący się przez stdin/stdout. |
HTTP
HTTP startuje z src/index.ts przez startHttpTransport(buildMcpServerForModule, { port, host }).
Wymagania:
MCP_INTERNAL_TOKENmusi być ustawiony i niepusty.Każde żądanie do
/mcp/<moduleId>musi mieć nagłówekAuthorization: Bearer <token>./healthzi/metricsnie wymagają Bearer tokena.
Domyślne wartości:
Zmienna | Domyślnie | Znaczenie |
|
| Host bindowania HTTP. |
|
| Port HTTP. |
|
| Endpoint health check. |
|
| Endpoint metryk Prometheus. |
stdio
startStdioTransport(server) istnieje w src/transports/stdio.ts, ale nie jest podłączony w domyślnym src/index.ts. Żeby użyć stdio, trzeba przygotować osobny entry point albo ręcznie przełączyć index.ts z HTTP na stdio.
Minimalny schemat:
const server = createMcpServer();
const registry = new ToolRegistry(server);
await registry.loadSingleModule(moduleConfig);
await startStdioTransport(server);Moduły i narzędzia
flowchart TD
Modules["src/modules"]
Modules --> Portfolio["portfolio"]
Portfolio --> P1["profile / about / manifest"]
P1 --> P2["search"]
P2 --> P3["projects / skills / experience / courses"]
Modules --> Trilium["trilium"]
Trilium --> T1["get_note"]
T1 --> T2["list_by_label"]
T2 --> T3["get_tree"]
T3 --> T4["save_note"]
Modules --> TestTools["test-tools"]
TestTools --> D1["get_user_data"]
D1 --> D2["get_products"]
Portfolio ~~~ Trilium
Trilium ~~~ TestToolsPortfolio
Moduł portfolio obsługuje środowisko produkcyjne: udostępnia publiczne dane portfolio z plików Markdown i manifest.json. Treść jest czytana z PORTFOLIO_CONTENT_ROOT, a ścieżki są chronione przed path traversal.
Domyślny namespace narzędzi: portfolio.
Narzędzie | Opis |
| Profil publiczny. |
| Sekcja "O mnie". |
| Manifest treści portfolio. |
| Wyszukiwanie po korpusie. |
| Projekty. |
| Umiejętności. |
| Doświadczenie. |
| Kursy. |
Trilium
Moduł trilium obsługuje środowisko homelab: integruje MCP z Trilium Notes przez ETAPI. Wymaga TRILIUM_BASE_URL i TRILIUM_API_TOKEN. Kod modułu znajduje się na branchu feat/trilium-integration.
Domyślny namespace narzędzi: trilium.
Narzędzie | Tryb | Opis |
| Read | Pobiera metadane notatki, opcjonalnie także treść. |
| Read | Wyszukuje notatki po labelce |
| Read | Buduje drzewo notatek od wskazanego korzenia. |
| Write | Tworzy nową notatkę albo aktualizuje tytuł/treść istniejącej. |
Ważne: chronione notatki Trilium są obsługiwane jako błąd narzędzia bez ujawniania treści.
test-tools
Moduł kontrolny do sprawdzania działania rejestracji narzędzi i odpowiedzi MCP.
Domyślny namespace narzędzi: test.
Narzędzie | Opis |
| Zwraca przykładowe dane użytkownika. |
| Zwraca przykładowe produkty. |
W konfiguracji publicznej lub produkcyjnej zwykle warto go wyłączyć:
ENABLE_MODULE_TEST_TOOLS=falseKonfiguracja
Konfiguracja modułów znajduje się w config/modules.config.ts, a przykładowe zmienne w .env.example.
Zmienne Wspólne
Zmienna | Wymagana | Opis |
| Nie | Host HTTP, domyślnie |
| Nie | Port HTTP, domyślnie |
| Tak dla HTTP | Bearer token wymagany dla |
| Nie |
|
| Nie | Domyślnie |
| Nie |
|
| Nie | Domyślnie |
Portfolio
Zmienna | Domyślnie | Opis |
| Włączony, jeśli nie | Flaga modułu. |
|
| Prefix nazw narzędzi. |
|
| Katalog treści. |
|
| Wersja korpusu zwracana w danych modułu. |
Trilium
Zmienna | Domyślnie | Opis |
| Włączony, jeśli nie | Flaga modułu. W |
|
| Prefix nazw narzędzi. |
| Brak | Bazowy URL Trilium ETAPI. |
| Brak | Token ETAPI. |
Jeśli Trilium jest włączony bez TRILIUM_BASE_URL i TRILIUM_API_TOKEN, src/index.ts przerwie start procesu.
test-tools
Zmienna | Domyślnie | Opis |
| Włączony, jeśli nie | Flaga modułu demonstracyjnego. |
|
| Prefix nazw narzędzi. |
Obsługa Operacyjna
Komenda | Opis |
| Start developerski przez |
| Kompilacja TypeScript i kopiowanie contentu portfolio do |
| Start produkcyjny z |
| Sprawdzenie typów bez generowania plików. |
Build uruchamia tsc oraz scripts/copy-portfolio-content.mjs, żeby content portfolio był dostępny po kompilacji.
Observability
Endpointy observability są rejestrowane tylko przez transport HTTP.
Health
GET /healthz zwraca:
{
"status": "ok",
"checks": []
}Status globalny:
ok- wszystkie checki włączonych modułów są poprawne.degraded- co najmniej jeden check zwrócił błąd.
Aktualne checki:
Moduł | Check | Znaczenie |
|
| Czy katalog contentu istnieje i jest czytelny. |
|
| Czy konfiguracja ETAPI działa i Trilium odpowiada. |
Metryki Prometheus
GET /metrics zwraca metryki z prom-client.
Metryka | Typ | Etykiety |
| Counter |
|
| Counter |
|
| Counter |
|
| Gauge |
|
| Counter |
|
| Counter |
|
| Counter |
|
| Histogram |
|
Każde żądanie HTTP dostaje requestId z nagłówka x-request-id albo z randomUUID().
Docker
Projekt zawiera Dockerfile i docker-compose.yml.
docker compose up --buildW docker-compose.yml kontener wystawia port 8090, dlatego w .env dla tego wariantu ustaw:
MCP_HOST=0.0.0.0
MCP_PORT=8090
MCP_INTERNAL_TOKEN=production-tokenPrzykładowy endpoint po starcie:
http://127.0.0.1:8090/mcp/portfolioIntegracja z klientami MCP
HTTP
Dla klientów obsługujących Streamable HTTP użyj adresu modułu:
http://<host>:<port>/mcp/<moduleId>Do żądań MCP dodaj nagłówek:
Authorization: Bearer <MCP_INTERNAL_TOKEN>Cursor i stdio
Domyślny entry point uruchamia HTTP, nie stdio. Jeśli klient wymaga konfiguracji command + args, przygotuj wariant stdio, który wywołuje startStdioTransport(server).
Po zbudowaniu projektu typowa ścieżka entry pointu to:
dist/src/index.jsTreść portfolio
Pliki portfolio znajdują się w:
src/modules/portfolio/content/Po buildzie content jest kopiowany do:
dist/src/modules/portfolio/content/Przykładowy front matter:
---
project_name: Mój projekt
project_category: Web Development
tech_stack: Next.js, TypeScript
---
Opis projektu...Dodawanie modułu
Utwórz katalog
src/modules/<nazwa>/.Dodaj
index.tsz eksportemregister(server, options).Opcjonalnie dodaj
checkHealth(config).Dodaj wpis do
config/modules.config.ts.Ustal
ENABLE_MODULE_<NAZWA>i namespace w.env.example.Rejestruj narzędzia z nazwą opartą o namespace, np.
${namespace}_my_tool.
HTTP używa name z konfiguracji jako moduleId w ścieżce /mcp/<moduleId>. Namespace służy do nazw narzędzi i może być inny niż moduleId.
Licencja
ISC
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
MCP server for Product Management
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for the Inistate platform: module discovery, entry management, and activity submission.
Related MCP Servers
- FlicenseBqualityDmaintenanceAn MCP server framework featuring dynamic tool loading and a modular one-tool-per-file architecture for rapid development. It supports both Stdio and HTTP transport modes, offering automated test generation and centralized configuration management.11-
- FlicenseCqualityDmaintenanceMCP server that enables deployment and management of MCP servers through a simple configuration-based interface.1-
- FlicenseNot gradedqualityDmaintenanceA highly configurable, deployment-ready MCP server with modular architecture for dynamic tool loading and external package support.1-
- FlicenseNot gradedqualityBmaintenanceAn MCP server with HTTP/stdio support, a web admin panel for managing services, capabilities, and user permissions with Bearer token authentication, enabling relay and access control for MCP tools.-