Add MCP server over Streamable HTTP

Seven read-only tools over the catalog database: list_titles, search_scripts,
get_script, get_edition, list_files, find_file and collection_stats. Writing
stays in the CLI, where the effect of a command is visible.

Transport is Streamable HTTP on the JDK's com.sun.net.httpserver, so Gson is
the only new dependency. No sessions are kept: every tool is stateless, so
Mcp-Session-Id is omitted and GET returns 405 rather than opening an SSE
stream we would never write to. Requests carrying a non-loopback Origin are
rejected, since a page in a browser can POST to localhost.

Tool results are formatted text rather than JSON. The consumer is a model
reading the answer, and prose costs less context than the same data wrapped
in objects.

Required arguments are validated against each tool's inputSchema before
dispatch, so a missing parameter is an explicit tool error instead of a
result computed from a default. find_file groups by the canonical lowercase
path, otherwise an extracted directory and its ISO look like two files.

Database access is serialized on one lock because sqlite-jdbc shares a single
connection; the workload is read-only and single-client.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Patryk Gensch
2026-08-20 22:25:36 +02:00
co-authored by Claude Opus 5
parent 2a051c561b
commit 393bcde6a8
4 changed files with 794 additions and 0 deletions
+4
View File
@@ -29,6 +29,10 @@ dependencies {
runtimeOnly "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
implementation 'org.xerial:sqlite-jdbc:3.46.1.3'
// JSON-RPC serwera MCP. Transport stoi na com.sun.net.httpserver z JDK,
// więc poza parserem nie dokładamy nic.
implementation 'com.google.code.gson:gson:2.11.0'
}
application {