~bigbes/sr-ht-dolt · parade

main · last commit 6 hours ago · ti41arbu

← Back to the parade

sr-ht-dolt-0qf.3 mcpsrv: skeleton, Host allowlist, grant gate, list_databases Past Stand

status: closed P1 task
bd reopen sr-ht-dolt-0qf.3
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-08-12T20:11:44Z
Started2026-08-13T05:01:29Z
Updated2026-08-13T05:24:51Z
Closed2026-08-13T05:24:51Z
Description
New mcpsrv/ package: Server + New over modelcontextprotocol/go-sdk, stateless streamable HTTP, the Host allowlist that replaces the SDK DNS-rebinding guard, the read-grant gate in front of the handler, consumer-side seams in ports.go, and one tool (list_databases) to prove the surface end to end.
Design
docs/DESIGN.mcp.md §5-§7. Stateless is an authentication decision: in stateful mode the principal of the initialize request answers every later call. Port the donor identity matrix test and re-run it against our pinned SDK rather than citing the donor.
Acceptance criteria
Identity matrix test (no credential / stranger token / owner token on one session) asserts the answer follows the call; Host allowlist test (instance host passes, rebinding host 403 before the SDK); grant gate test.

Depends on

  • sr-ht-dolt-0qf — MCP surface: a read-only agent door to hosted databases parent-child closed
  • sr-ht-dolt-0qf.2 — authn: the tokens.sr.ht bearer plane and core.GrantRead blocks closed

Depended on by

Unblocks — everything waiting on this, transitively

  • sr-ht-dolt-0qf.5 — mcpsrv: beads tools over the shared projection blocks closed
  • sr-ht-dolt-0qf.6 — Wire /mcp into the daemon, config and README blocks closed
  • sr-ht-dolt-0qf.4 — mcpsrv: generic tools over the browse seam blocks closed

No comments.

Close reason

Landed in dcdc979: stateless streamable transport, Host allowlist replacing the SDK rebinding guard, bearer middleware with the 401/403/503 split, grant gate on core.GrantRead, seams in ports.go, list_databases. 59 tests; the identity matrix was verified to FAIL under stateless=false before being reverted.
  • Eugene Blikh added under epic sr-ht-dolt-0qf · 2026-08-12T23:11:44Z
  • Eugene Blikh created the issue · 2026-08-12T23:11:44Z
  • Eugene Blikh added dependency on sr-ht-dolt-0qf.2 · 2026-08-12T23:12:54Z
  • Eugene Blikh sr-ht-dolt-0qf.5 now depends on this · 2026-08-12T23:12:55Z
  • Eugene Blikh sr-ht-dolt-0qf.4 now depends on this · 2026-08-12T23:12:55Z
  • Eugene Blikh changed status to in_progress · 2026-08-13T08:01:29Z
  • Eugene Blikh closed the issue · 2026-08-13T08:24:50Z
    Landed in dcdc979: stateless streamable transport, Host allowlist replacing the SDK rebinding guard, bearer middleware with the 401/403/503 split, grant gate on core.GrantRead, seams in ports.go, list_databases. 59 tests; the identity matrix was verified to FAIL under stateless=false before being reverted.
Stored rows — what this pane was built from, as read
issues 1 row
id sr-ht-dolt-0qf.3
content_hash 700764cff30a4c71a08b87eecb428a469a1701bb257a567e2e8b55e8e1762223
title mcpsrv: skeleton, Host allowlist, grant gate, list_databases
description New mcpsrv/ package: Server + New over modelcontextprotocol/go-sdk, stateless streamable HTTP, the Host allowlist that replaces the SDK DNS-rebinding guard, the read-grant gate in front of the handler, consumer-side seams in ports.go, and one tool (list_databases) to prove the surface end to end.
design docs/DESIGN.mcp.md §5-§7. Stateless is an authentication decision: in stateful mode the principal of the initialize request answers every later call. Port the donor identity matrix test and re-run it against our pinned SDK rather than citing the donor.
acceptance_criteria Identity matrix test (no credential / stranger token / owner token on one session) asserts the answer follows the call; Host allowlist test (instance host passes, rebinding host 403 before the SDK); grant gate test.
notes
status closed
priority 1
issue_type task
assignee NULL
estimated_minutes NULL
created_at 2026-08-12T20:11:44Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-08-13T05:24:51Z
closed_at 2026-08-13T05:24:51Z
closed_by_session
external_ref NULL
spec_id
compaction_level 0
compacted_at NULL
compacted_at_commit NULL
original_size NULL
sender
ephemeral 0
wisp_type
pinned 0
is_template 0
mol_type
work_type
source_system
metadata �{}
source_repo
close_reason Landed in dcdc979: stateless streamable transport, Host allowlist replacing the SDK rebinding guard, bearer middleware with the 401/403/503 split, grant gate on core.GrantRead, seams in ports.go, list_databases. 59 tests; the identity matrix was verified to FAIL under stateless=false before being reverted.
event_kind
actor
target
payload
await_type
await_id
timeout_ns 0
waiters
hook_bead
role_bead
agent_state
last_activity NULL
role_type
rig
due_at NULL
defer_until NULL
no_history 0
started_at 2026-08-13T05:01:29Z
is_blocked 0
dependencies 4 rows
id 0692606e-5a8d-507c-8191-8c48d66330a3
issue_id sr-ht-dolt-0qf.5
type blocks
created_at 2026-08-12T23:12:55Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id sr-ht-dolt-0qf.3
depends_on_wisp_id NULL
depends_on_external NULL
id 4f91155c-b2d3-56ea-881f-6ecdb0c45b70
issue_id sr-ht-dolt-0qf.4
type blocks
created_at 2026-08-12T23:12:55Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id sr-ht-dolt-0qf.3
depends_on_wisp_id NULL
depends_on_external NULL
id 5e3c79a4-431d-5096-88f6-615afe422328
issue_id sr-ht-dolt-0qf.3
type parent-child
created_at 2026-08-12T23:11:44Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id sr-ht-dolt-0qf
depends_on_wisp_id NULL
depends_on_external NULL
id cd1b0742-7b5a-53bf-b62a-806b6efbd306
issue_id sr-ht-dolt-0qf.3
type blocks
created_at 2026-08-12T23:12:54Z
created_by Eugene Blikh
metadata �{}
thread_id
depends_on_issue_id sr-ht-dolt-0qf.2
depends_on_wisp_id NULL
depends_on_external NULL
events 3 rows
id 019ff79a-2ce9-7d81-a3d8-f68732ffee3b
issue_id sr-ht-dolt-0qf.3
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-08-12T23:11:44Z
id 019ff97f-2da8-7ac9-bb36-6352d2bfc762
issue_id sr-ht-dolt-0qf.3
event_type status_changed
actor Eugene Blikh
old_value {"id":"sr-ht-dolt-0qf.3","title":"mcpsrv: skeleton, Host allowlist, grant gate, list_databases","description":"New mcpsrv/ package: Server + New over modelcontextprotocol/go-sdk, stateless streamable HTTP, the Host allowlist that replaces the SDK DNS-rebinding guard, the read-grant gate in front of the handler, consumer-side seams in ports.go, and one tool (list_databases) to prove the surface end to end.","design":"docs/DESIGN.mcp.md §5-§7. Stateless is an authentication decision: in stateful mode the principal of the initialize request answers every later call. Port the donor identity matrix test and re-run it against our pinned SDK rather than citing the donor.","acceptance_criteria":"Identity matrix test (no credential / stranger token / owner token on one session) asserts the answer follows the call; Host allowlist test (instance host passes, rebinding host 403 before the SDK); grant gate test.","status":"open","priority":1,"issue_type":"task","owner":"bigbes@gmail.com","created_at":"2026-08-12T20:11:44Z","created_by":"Eugene Blikh","updated_at":"2026-08-12T20:11:44Z"}
new_value {"status":"in_progress"}
comment NULL
created_at 2026-08-13T08:01:29Z
id 019ff994-8f9d-7659-9c4a-0da852c10efd
issue_id sr-ht-dolt-0qf.3
event_type closed
actor Eugene Blikh
old_value
new_value Landed in dcdc979: stateless streamable transport, Host allowlist replacing the SDK rebinding guard, bearer middleware with the 401/403/503 split, grant gate on core.GrantRead, seams in ports.go, list_databases. 59 tests; the identity matrix was verified to FAIL under stateless=false before being reverted.
comment NULL
created_at 2026-08-13T08:24:50Z