Repository navigation
Commit a0debd8
authored
feat(mcp): serve the agent resources surface that only dappcore/mcp had (#20)
The agent MCP server answered resources/list with a hardcoded
['resources' => []] and implemented no resources/read at all. The real
surface — plans, phase checklists, plan state, session context — lived only
in dappcore/mcp's McpAgentServerCommand, which is also where the dependency
cycle came from: a shared package importing Core\Mod\Agentic\Models\*.
This ports the capability across so mcp's copy can be deleted afterwards
rather than before. Nothing is missing from both at once.
Five URI shapes, one class each, matching how Mcp\Tools\Agent already splits
tools out rather than carrying them as methods on a 2000-line command:
plans://all AllPlansResource
plans://{slug} PlanDocumentResource
plans://{slug}/phases/{order} PhaseChecklistResource
plans://{slug}/state/{key} StateValueResource
sessions://{id}/context SessionContextResource
AgentResourceRegistry lists and routes them, the counterpart to
AgentToolRegistry. Resources contribute their own list entries, so the plan
document resource enumerates every non-archived plan while the unbounded
per-key ones advertise nothing and stay directly addressable.
Two deliberate departures from the code being ported.
A missing target now answers a JSON-RPC -32602 instead of returning the
string "Plan not found: {slug}" as the resource body — a client could not
distinguish that from a real document whose text happens to say so.
And initialize advertises the resources capability. Implementing the surface
without declaring it would leave it undiscoverable: a client that is not told
the server has resources never issues resources/list, so it would have been
shipped and never called, which is the failure this whole sweep exists to
remove.
Registered as a container singleton in register(), not hung off an event like
onMcpTools. There is no McpResourcesRegistering to listen for, and $listens
is populated by ModuleScanner from app/Core|Mod|Website only — dead once this
package sits under vendor/ — so a binding is what actually resolves in a host
application.
Ten new tests: six over the registry (routing, declining near-miss shapes,
reading, dynamic listing, and returning null rather than a document for a
missing target) and four driving the real stdio command end to end for the
initialize advertisement, resources/list, resources/read and its error path.
Suite: 156 failed, 1165 passed, from 156 failed, 1155 passed — the same
failures, plus exactly these ten.1 parent 1fd5971 commit a0debd8
11 files changed
Lines changed: 885 additions & 13 deletions
File tree
- php
- Mcp
- Console
- Resources/Agent
- Services
- tests/Feature/Mcp
- Console
- Resources
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
13 | 18 | | |
14 | 19 | | |
15 | 20 | | |
| |||
90 | 95 | | |
91 | 96 | | |
92 | 97 | | |
93 | | - | |
94 | | - | |
| 98 | + | |
| 99 | + | |
95 | 100 | | |
96 | | - | |
97 | | - | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
98 | 120 | | |
99 | 121 | | |
100 | 122 | | |
101 | 123 | | |
102 | 124 | | |
103 | | - | |
| 125 | + | |
104 | 126 | | |
105 | 127 | | |
106 | 128 | | |
| |||
111 | 133 | | |
112 | 134 | | |
113 | 135 | | |
114 | | - | |
| 136 | + | |
115 | 137 | | |
116 | 138 | | |
117 | 139 | | |
| |||
201 | 223 | | |
202 | 224 | | |
203 | 225 | | |
204 | | - | |
| 226 | + | |
205 | 227 | | |
206 | 228 | | |
207 | 229 | | |
| |||
247 | 269 | | |
248 | 270 | | |
249 | 271 | | |
250 | | - | |
| 272 | + | |
251 | 273 | | |
252 | 274 | | |
253 | 275 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| |||
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| 41 | + | |
40 | 42 | | |
41 | 43 | | |
42 | 44 | | |
| |||
64 | 66 | | |
65 | 67 | | |
66 | 68 | | |
| 69 | + | |
67 | 70 | | |
68 | 71 | | |
69 | 72 | | |
| |||
118 | 121 | | |
119 | 122 | | |
120 | 123 | | |
121 | | - | |
| 124 | + | |
| 125 | + | |
122 | 126 | | |
123 | 127 | | |
124 | 128 | | |
| |||
142 | 146 | | |
143 | 147 | | |
144 | 148 | | |
| 149 | + | |
145 | 150 | | |
146 | 151 | | |
147 | 152 | | |
| |||
157 | 162 | | |
158 | 163 | | |
159 | 164 | | |
| 165 | + | |
160 | 166 | | |
161 | 167 | | |
162 | 168 | | |
| |||
171 | 177 | | |
172 | 178 | | |
173 | 179 | | |
174 | | - | |
| 180 | + | |
| 181 | + | |
175 | 182 | | |
176 | 183 | | |
177 | 184 | | |
| |||
199 | 206 | | |
200 | 207 | | |
201 | 208 | | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
202 | 219 | | |
203 | 220 | | |
204 | 221 | | |
| |||
221 | 238 | | |
222 | 239 | | |
223 | 240 | | |
224 | | - | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
225 | 246 | | |
226 | 247 | | |
227 | 248 | | |
| |||
340 | 361 | | |
341 | 362 | | |
342 | 363 | | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
343 | 396 | | |
344 | 397 | | |
345 | 398 | | |
346 | 399 | | |
347 | 400 | | |
348 | 401 | | |
349 | | - | |
| 402 | + | |
350 | 403 | | |
351 | 404 | | |
352 | 405 | | |
| |||
376 | 429 | | |
377 | 430 | | |
378 | 431 | | |
379 | | - | |
| 432 | + | |
380 | 433 | | |
381 | 434 | | |
382 | 435 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
0 commit comments