mcpsrv: report the projection's clip on get_issue and list_milestones Max clips every table read at 2000 rows. list_issues has always said so (table_truncated, table_total); the other two answers computed over the same read said nothing, so a rollup over a prefix of the tracker read as arithmetic about the whole of it, and an id in the tail of a big tracker was answered "no such issue" — a claim neither read can support. get_issue now carries the two fields on every answer and splits the miss: a complete read keeps the plain refusal, a clipped one says the id was not among the rows read, names the cap and the true total, and ships the payload (issue: null beside table_truncated) so the two misses are one field apart rather than one adjective apart. list_milestones carries the same two fields.
mcpsrv: answer a real NULL as null
mcpsrv: name the cursor a commit-log miss was asked about
mcpsrv: a bad commit-log cursor is a miss, not a fault
mcpsrv: answer what is ready across every tracker
mcpsrv: list the memories a tracker holds
mcpsrv: add the beads tools
mcpsrv: add the generic browse tools
mcpsrv: serve a stateless read-only MCP surface