@toa.io/extensions.exposition 1.0.0-alpha.292 → 1.0.0-alpha.293

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/components/identity.basic/package.json +8 -0
  2. package/components/identity.federation/package.json +8 -0
  3. package/components/identity.passkeys/package.json +8 -0
  4. package/components/identity.tokens/package.json +10 -0
  5. package/package.json +24 -13
  6. package/transpiled/Endpoint.js +3 -0
  7. package/transpiled/Endpoint.js.map +1 -1
  8. package/transpiled/Introspection.d.ts +6 -0
  9. package/transpiled/Introspection.js +1 -0
  10. package/transpiled/Introspection.js.map +1 -1
  11. package/transpiled/MCP/schema.js +2 -2
  12. package/transpiled/Query.d.ts +2 -12
  13. package/transpiled/Query.js +2 -12
  14. package/transpiled/Query.js.map +1 -1
  15. package/transpiled/RTD/Endpoint.d.ts +2 -3
  16. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  17. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  18. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  19. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  20. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  21. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  22. package/ui/dist/_app/immutable/chunks/{aLpTDmOc.js → DVlaUfVU.js} +1 -1
  23. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  24. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  25. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  26. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  27. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  28. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  29. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  30. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  31. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  32. package/ui/dist/_app/version.json +1 -1
  33. package/ui/dist/index.html +12 -12
  34. package/CHANGELOG.md +0 -42
  35. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  36. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  37. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  38. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  39. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  40. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  41. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  42. package/components/identity.credentials/source/list.test.ts +0 -70
  43. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  44. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  45. package/components/identity.federation/source/list.test.ts +0 -41
  46. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  47. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  48. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  49. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  50. package/components/identity.passkeys/source/errors.test.ts +0 -34
  51. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  52. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  53. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  54. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  55. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  56. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  57. package/components/identity.tokens/source/issue.test.ts +0 -73
  58. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  59. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  60. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  61. package/context.toa.yaml +0 -31
  62. package/cucumber.mjs +0 -7
  63. package/documentation/.assets/ia3-dark.jpg +0 -0
  64. package/documentation/.assets/ia3-light.jpg +0 -0
  65. package/documentation/.assets/overview-dark.jpg +0 -0
  66. package/documentation/.assets/overview-light.jpg +0 -0
  67. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  68. package/documentation/.assets/role-scopes-light.jpg +0 -0
  69. package/documentation/.assets/rtd-dark.jpg +0 -0
  70. package/documentation/.assets/rtd-light.jpg +0 -0
  71. package/documentation/access.md +0 -350
  72. package/documentation/authorities.md +0 -51
  73. package/documentation/cache.md +0 -72
  74. package/documentation/components.md +0 -472
  75. package/documentation/consent.md +0 -101
  76. package/documentation/credentials.md +0 -88
  77. package/documentation/dev.md +0 -30
  78. package/documentation/discovery.md +0 -81
  79. package/documentation/flow.md +0 -44
  80. package/documentation/help.md +0 -122
  81. package/documentation/identity.md +0 -304
  82. package/documentation/introspection.md +0 -123
  83. package/documentation/io.md +0 -167
  84. package/documentation/ip.md +0 -24
  85. package/documentation/map.md +0 -123
  86. package/documentation/mcp.md +0 -183
  87. package/documentation/notes/desync.jpg +0 -0
  88. package/documentation/notes/peers.md +0 -59
  89. package/documentation/notes/sse.md +0 -71
  90. package/documentation/notes/throttling.md +0 -122
  91. package/documentation/oauth.md +0 -180
  92. package/documentation/octets.md +0 -334
  93. package/documentation/passkeys.md +0 -11
  94. package/documentation/protocol.md +0 -120
  95. package/documentation/query.md +0 -324
  96. package/documentation/require.md +0 -15
  97. package/documentation/rpc.md +0 -154
  98. package/documentation/tracing.md +0 -70
  99. package/documentation/tree.md +0 -199
  100. package/features/access.feature +0 -596
  101. package/features/annotation.feature +0 -32
  102. package/features/auth.assert.feature +0 -55
  103. package/features/auth.bearer.feature +0 -120
  104. package/features/auth.claims.feature +0 -171
  105. package/features/auth.incept.feature +0 -166
  106. package/features/auth.input.feature +0 -59
  107. package/features/authorities.basic.feature +0 -141
  108. package/features/authorities.feature +0 -71
  109. package/features/authorities.federation.feature +0 -100
  110. package/features/authorities.tokens.feature +0 -117
  111. package/features/body.feature +0 -76
  112. package/features/cache.feature +0 -368
  113. package/features/configuration.feature +0 -206
  114. package/features/cors.feature +0 -127
  115. package/features/credentials.feature +0 -106
  116. package/features/debug.feature +0 -34
  117. package/features/dev.feature +0 -90
  118. package/features/directives.feature +0 -61
  119. package/features/discovery.feature +0 -213
  120. package/features/discovery.ui.feature +0 -213
  121. package/features/dynamic.feature +0 -192
  122. package/features/errors.feature +0 -258
  123. package/features/etag.feature +0 -239
  124. package/features/flow.feature +0 -148
  125. package/features/help.feature +0 -512
  126. package/features/identity.bans.feature +0 -200
  127. package/features/identity.basic.feature +0 -666
  128. package/features/identity.feature +0 -240
  129. package/features/identity.federation.feature +0 -396
  130. package/features/identity.otp.feature +0 -142
  131. package/features/identity.roles.feature +0 -568
  132. package/features/identity.tokens.custom.feature +0 -430
  133. package/features/identity.tokens.feature +0 -131
  134. package/features/interruptions.feature +0 -20
  135. package/features/introspection.feature +0 -565
  136. package/features/introspection.map.feature +0 -108
  137. package/features/io.feature +0 -204
  138. package/features/io.throttle.feature +0 -166
  139. package/features/map.feature +0 -360
  140. package/features/mcp.feature +0 -753
  141. package/features/methods.feature +0 -48
  142. package/features/oauth.clients.feature +0 -195
  143. package/features/oauth.discovery.feature +0 -164
  144. package/features/oauth.grants.feature +0 -301
  145. package/features/octets.cloudinary.feature +0 -233
  146. package/features/octets.download.feature +0 -194
  147. package/features/octets.entries.feature +0 -83
  148. package/features/octets.feature +0 -306
  149. package/features/octets.head.feature +0 -40
  150. package/features/octets.location.feature +0 -83
  151. package/features/octets.meta.feature +0 -117
  152. package/features/octets.workflows.feature +0 -565
  153. package/features/passkeys.feature +0 -66
  154. package/features/probes.feature +0 -18
  155. package/features/query.feature +0 -389
  156. package/features/realtime.feature +0 -34
  157. package/features/require.feature +0 -66
  158. package/features/response.feature +0 -103
  159. package/features/routes.feature +0 -224
  160. package/features/rpc.feature +0 -429
  161. package/features/server.feature +0 -21
  162. package/features/site/_app/immutable/asset.js +0 -1
  163. package/features/site/favicon.ico +0 -0
  164. package/features/site/index.html +0 -10
  165. package/features/steps/.env.example +0 -5
  166. package/features/steps/Captures.ts +0 -20
  167. package/features/steps/Cloudinary.ts +0 -12
  168. package/features/steps/Common.ts +0 -38
  169. package/features/steps/Components.ts +0 -115
  170. package/features/steps/Database.ts +0 -106
  171. package/features/steps/Gateway.ts +0 -239
  172. package/features/steps/HTTP.ts +0 -96
  173. package/features/steps/IDP.ts +0 -361
  174. package/features/steps/Identity.ts +0 -54
  175. package/features/steps/OTP.ts +0 -42
  176. package/features/steps/Parameters.ts +0 -162
  177. package/features/steps/Probe.ts +0 -38
  178. package/features/steps/Realtime.ts +0 -175
  179. package/features/steps/Workspace.ts +0 -48
  180. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  181. package/features/steps/components/audit/operations/record.js +0 -5
  182. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  183. package/features/steps/components/echo/operations/affect.js +0 -3
  184. package/features/steps/components/echo/operations/compute.js +0 -3
  185. package/features/steps/components/echo/operations/echo.js +0 -3
  186. package/features/steps/components/echo/operations/error.js +0 -7
  187. package/features/steps/components/echo/operations/identity.js +0 -3
  188. package/features/steps/components/echo/operations/parameters.js +0 -3
  189. package/features/steps/components/echo/operations/ping.js +0 -3
  190. package/features/steps/components/echo/operations/unwrap.js +0 -3
  191. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  192. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  193. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  194. package/features/steps/components/greeter/operations/greet.js +0 -3
  195. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  196. package/features/steps/components/notify/operations/send.js +0 -5
  197. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  198. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  199. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  200. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  201. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  202. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  203. package/features/steps/components/octets.tester/operations/err.js +0 -14
  204. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  205. package/features/steps/components/octets.tester/operations/id.js +0 -5
  206. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  207. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  208. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  209. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  210. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  211. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  212. package/features/steps/components/orders/operations/create.js +0 -7
  213. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  214. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  215. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  216. package/features/steps/components/pricing/operations/quote.js +0 -3
  217. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  218. package/features/steps/components/sequences/operations/numbers.js +0 -5
  219. package/features/steps/components/sequences/operations/tokens.js +0 -14
  220. package/features/steps/components/users/manifest.toa.yaml +0 -30
  221. package/features/steps/components/users/operations/create.js +0 -11
  222. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  223. package/features/steps/map.ts +0 -30
  224. package/features/steps/tsconfig.json +0 -9
  225. package/features/streams.feature +0 -35
  226. package/features/timestamps.feature +0 -41
  227. package/features/timing.feature +0 -49
  228. package/features/tracing.feature +0 -123
  229. package/source/Branch.test.ts +0 -40
  230. package/source/Branch.ts +0 -44
  231. package/source/Composition.ts +0 -51
  232. package/source/Context.ts +0 -11
  233. package/source/Directive.test.ts +0 -199
  234. package/source/Directive.ts +0 -248
  235. package/source/Discovery/Explorer.ts +0 -34
  236. package/source/Discovery/Site.test.ts +0 -147
  237. package/source/Discovery/Site.ts +0 -202
  238. package/source/Discovery/index.ts +0 -3
  239. package/source/Discovery/tree.test.ts +0 -175
  240. package/source/Discovery/tree.ts +0 -77
  241. package/source/Discovery/trunk.ts +0 -33
  242. package/source/Endpoint.test.ts +0 -67
  243. package/source/Endpoint.ts +0 -157
  244. package/source/Factory.ts +0 -42
  245. package/source/Gateway.ts +0 -390
  246. package/source/HTTP/Context.ts +0 -143
  247. package/source/HTTP/Probe.ts +0 -99
  248. package/source/HTTP/Server.ts +0 -435
  249. package/source/HTTP/Timing.ts +0 -14
  250. package/source/HTTP/address.test.ts +0 -28
  251. package/source/HTTP/address.ts +0 -16
  252. package/source/HTTP/exceptions.ts +0 -99
  253. package/source/HTTP/formats/form.ts +0 -21
  254. package/source/HTTP/formats/index.ts +0 -36
  255. package/source/HTTP/formats/json.ts +0 -14
  256. package/source/HTTP/formats/msgpack.ts +0 -14
  257. package/source/HTTP/formats/text.ts +0 -10
  258. package/source/HTTP/formats/yaml.test.ts +0 -22
  259. package/source/HTTP/formats/yaml.ts +0 -40
  260. package/source/HTTP/index.ts +0 -6
  261. package/source/HTTP/messages.test.ts +0 -196
  262. package/source/HTTP/messages.ts +0 -186
  263. package/source/HTTP/types.ts +0 -39
  264. package/source/Interception.ts +0 -37
  265. package/source/Introspection.ts +0 -179
  266. package/source/MCP/Server.ts +0 -335
  267. package/source/MCP/discover.ts +0 -51
  268. package/source/MCP/errors.ts +0 -80
  269. package/source/MCP/index.ts +0 -1
  270. package/source/MCP/schema.test.ts +0 -91
  271. package/source/MCP/schema.ts +0 -94
  272. package/source/MCP/tools.ts +0 -144
  273. package/source/MCP/types.ts +0 -84
  274. package/source/Mapping.ts +0 -101
  275. package/source/Query.test.ts +0 -54
  276. package/source/Query.ts +0 -277
  277. package/source/RPC/Context.ts +0 -75
  278. package/source/RPC/Dispatcher.ts +0 -150
  279. package/source/RPC/errors.test.ts +0 -77
  280. package/source/RPC/errors.ts +0 -82
  281. package/source/RPC/index.ts +0 -1
  282. package/source/RPC/names.test.ts +0 -141
  283. package/source/RPC/names.ts +0 -176
  284. package/source/RPC/types.ts +0 -34
  285. package/source/RTD/Context.ts +0 -16
  286. package/source/RTD/Directives.ts +0 -126
  287. package/source/RTD/Endpoint.ts +0 -27
  288. package/source/RTD/Match.ts +0 -11
  289. package/source/RTD/Method.ts +0 -39
  290. package/source/RTD/Node.ts +0 -169
  291. package/source/RTD/Route.ts +0 -93
  292. package/source/RTD/Tree.ts +0 -137
  293. package/source/RTD/expiration.test.ts +0 -81
  294. package/source/RTD/factory.ts +0 -105
  295. package/source/RTD/index.ts +0 -8
  296. package/source/RTD/segment.test.ts +0 -35
  297. package/source/RTD/segment.ts +0 -51
  298. package/source/RTD/syntax/index.ts +0 -1
  299. package/source/RTD/walk.test.ts +0 -147
  300. package/source/Remotes.test.ts +0 -79
  301. package/source/Remotes.ts +0 -39
  302. package/source/Tenant.ts +0 -73
  303. package/source/directives/auth/Anonymous.test.ts +0 -70
  304. package/source/directives/auth/Anonymous.ts +0 -36
  305. package/source/directives/auth/Anyone.ts +0 -23
  306. package/source/directives/auth/Assert.ts +0 -43
  307. package/source/directives/auth/Authorization.test.ts +0 -24
  308. package/source/directives/auth/Authorization.ts +0 -388
  309. package/source/directives/auth/Delegate.test.ts +0 -36
  310. package/source/directives/auth/Delegate.ts +0 -54
  311. package/source/directives/auth/Echo.ts +0 -24
  312. package/source/directives/auth/Federation.ts +0 -104
  313. package/source/directives/auth/Id.ts +0 -37
  314. package/source/directives/auth/Incept.ts +0 -117
  315. package/source/directives/auth/Input.ts +0 -92
  316. package/source/directives/auth/Role.test.ts +0 -147
  317. package/source/directives/auth/Role.ts +0 -99
  318. package/source/directives/auth/Rule.ts +0 -59
  319. package/source/directives/auth/Scheme.ts +0 -31
  320. package/source/directives/auth/create.ts +0 -11
  321. package/source/directives/auth/index.ts +0 -3
  322. package/source/directives/auth/schemes.test.ts +0 -18
  323. package/source/directives/auth/schemes.ts +0 -39
  324. package/source/directives/auth/split.ts +0 -14
  325. package/source/directives/auth/types.ts +0 -75
  326. package/source/directives/cache/Cache.ts +0 -92
  327. package/source/directives/cache/Control.ts +0 -81
  328. package/source/directives/cache/Exact.ts +0 -7
  329. package/source/directives/cache/etag.ts +0 -38
  330. package/source/directives/cache/index.ts +0 -3
  331. package/source/directives/cache/types.ts +0 -9
  332. package/source/directives/cors/CORS.test.ts +0 -75
  333. package/source/directives/cors/CORS.ts +0 -88
  334. package/source/directives/cors/index.ts +0 -3
  335. package/source/directives/dev/Development.ts +0 -41
  336. package/source/directives/dev/Faulty.ts +0 -31
  337. package/source/directives/dev/Sleep.ts +0 -53
  338. package/source/directives/dev/Stub.ts +0 -14
  339. package/source/directives/dev/Throw.ts +0 -14
  340. package/source/directives/dev/index.ts +0 -3
  341. package/source/directives/dev/types.ts +0 -5
  342. package/source/directives/flow/Compose.ts +0 -98
  343. package/source/directives/flow/Fetch.ts +0 -86
  344. package/source/directives/flow/Flow.ts +0 -43
  345. package/source/directives/flow/index.ts +0 -3
  346. package/source/directives/flow/types.ts +0 -7
  347. package/source/directives/help/Family.ts +0 -122
  348. package/source/directives/help/Help.test.ts +0 -227
  349. package/source/directives/help/Help.ts +0 -47
  350. package/source/directives/help/Parameters.ts +0 -47
  351. package/source/directives/help/described.ts +0 -57
  352. package/source/directives/help/index.ts +0 -45
  353. package/source/directives/index.ts +0 -33
  354. package/source/directives/io/Directive.ts +0 -17
  355. package/source/directives/io/IO.ts +0 -118
  356. package/source/directives/io/Input.ts +0 -55
  357. package/source/directives/io/Message.ts +0 -1
  358. package/source/directives/io/Output.ts +0 -81
  359. package/source/directives/io/Status.test.ts +0 -88
  360. package/source/directives/io/Status.ts +0 -47
  361. package/source/directives/io/Throttle.ts +0 -30
  362. package/source/directives/io/index.ts +0 -3
  363. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  364. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  365. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  366. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  367. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  368. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  369. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  370. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  371. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  372. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  373. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  374. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  375. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  376. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  377. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  378. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  379. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  380. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  381. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  382. package/source/directives/io/lib/throttle/index.ts +0 -4
  383. package/source/directives/io/schemas.test.ts +0 -40
  384. package/source/directives/io/schemas.ts +0 -16
  385. package/source/directives/map/Authority.ts +0 -15
  386. package/source/directives/map/Buffer.ts +0 -15
  387. package/source/directives/map/Claims.ts +0 -63
  388. package/source/directives/map/Directive.ts +0 -4
  389. package/source/directives/map/Headers.ts +0 -60
  390. package/source/directives/map/Language.ts +0 -45
  391. package/source/directives/map/Languages.ts +0 -17
  392. package/source/directives/map/Map.ts +0 -85
  393. package/source/directives/map/Mapping.ts +0 -45
  394. package/source/directives/map/Properties.ts +0 -15
  395. package/source/directives/map/Segments.ts +0 -52
  396. package/source/directives/map/index.ts +0 -3
  397. package/source/directives/mcp/MCP.ts +0 -33
  398. package/source/directives/mcp/Tool.test.ts +0 -56
  399. package/source/directives/mcp/Tool.ts +0 -32
  400. package/source/directives/mcp/index.ts +0 -6
  401. package/source/directives/oauth/Discovery.ts +0 -66
  402. package/source/directives/oauth/documents.ts +0 -110
  403. package/source/directives/oauth/index.ts +0 -3
  404. package/source/directives/octets/Context.ts +0 -23
  405. package/source/directives/octets/Delete.ts +0 -96
  406. package/source/directives/octets/Directive.ts +0 -21
  407. package/source/directives/octets/Get.ts +0 -88
  408. package/source/directives/octets/Octets.ts +0 -82
  409. package/source/directives/octets/Put.ts +0 -186
  410. package/source/directives/octets/Workflow.ts +0 -60
  411. package/source/directives/octets/bytes.test.ts +0 -33
  412. package/source/directives/octets/bytes.ts +0 -18
  413. package/source/directives/octets/index.ts +0 -3
  414. package/source/directives/octets/schemas.test.ts +0 -20
  415. package/source/directives/octets/schemas.ts +0 -15
  416. package/source/directives/octets/types.ts +0 -9
  417. package/source/directives/octets/workflows/Execution.ts +0 -130
  418. package/source/directives/octets/workflows/Workflow.ts +0 -51
  419. package/source/directives/octets/workflows/index.ts +0 -1
  420. package/source/directives/require/Directive.ts +0 -5
  421. package/source/directives/require/Headers.ts +0 -19
  422. package/source/directives/require/Require.ts +0 -27
  423. package/source/directives/require/index.ts +0 -3
  424. package/source/discovery.ts +0 -1
  425. package/source/exceptions.ts +0 -47
  426. package/source/index.ts +0 -10
  427. package/source/io.ts +0 -4
  428. package/source/octets.d.ts +0 -17
  429. package/source/root.ts +0 -59
  430. package/source/service.ts +0 -95
  431. package/source/userland.ts +0 -47
  432. package/tsconfig.json +0 -13
  433. package/tsconfig.tsbuildinfo +0 -1
  434. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  435. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  436. package/ui/dist/_app/immutable/chunks/BaWe3aOV.js +0 -1
  437. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  438. package/ui/dist/_app/immutable/chunks/GZTfV0ks.js +0 -6
  439. package/ui/dist/_app/immutable/entry/app.D5v4JoUx.js +0 -2
  440. package/ui/dist/_app/immutable/entry/start.CWxFoIyZ.js +0 -1
  441. package/ui/dist/_app/immutable/nodes/0.DIh5T_5-.js +0 -1
  442. package/ui/dist/_app/immutable/nodes/1.CY-bFzHC.js +0 -1
  443. package/ui/dist/_app/immutable/nodes/2.6Ubd1ItY.js +0 -14
@@ -1,753 +0,0 @@
1
- @security
2
- Feature: Model Context Protocol
3
-
4
- A tool is a procedure a method is published as. A method says so with `mcp:tool`, and a
5
- default denies: a tree holds everything an application serves and most of it is machinery
6
- a model has no business reading. What the tool is called and what it is for is
7
- `help:method`, which is what describes the method everywhere else as well. What a tool
8
- takes and answers is what the method says of itself, and what a caller may do with it is
9
- what `auth` says.
10
-
11
- What a tool is, is stated on the route and nowhere else. The operation states what it is
12
- too, and that is not this: one operation mounted on two routes is two tools. A `title`
13
- beside the description is what a person is shown where a client lists what it may call.
14
-
15
- Two revisions are answered from one endpoint that remembers nothing between requests: the
16
- modern one, where every request carries its own version and capabilities, and the one
17
- before it, which opens with `initialize`. Neither is given a session, and neither is given
18
- a stream.
19
-
20
- Background:
21
- Given the annotation:
22
- """yaml
23
- mcp:
24
- name: Teapots
25
- instructions: A pot is read by its id.
26
- anonymous: true
27
- """
28
- And the `pots` is running with the following manifest:
29
- """yaml
30
- exposition:
31
- /:
32
- io:output: [id, title, volume]
33
- GET:
34
- mcp:tool: true
35
- help:method:
36
- description: All the pots, newest first.
37
- endpoint: enumerate
38
- POST:
39
- mcp:tool: true
40
- help:method:
41
- description: Start a new pot brewing.
42
- endpoint: create
43
- /:id:
44
- GET:
45
- mcp:tool: true
46
- help:method:
47
- description: One pot, by its id.
48
- endpoint: observe
49
- /large:
50
- GET:
51
- query:
52
- criteria: volume>=100
53
- mcp:tool: true
54
- help:method:
55
- title: Large pots
56
- description: The pots that hold a hundred or more, newest first.
57
- endpoint: enumerate
58
- /unpublished:
59
- GET: enumerate
60
- /guarded:
61
- isolated: true
62
- GET:
63
- auth:role: admin
64
- mcp:tool: true
65
- help:method:
66
- description: Every pot there is, for whoever may see them all.
67
- endpoint: enumerate
68
- """
69
- And the `pots` database contains:
70
- | _id | title | volume |
71
- | 4c4759e6f9c74da989d64511df42d6f4 | First pot | 100 |
72
-
73
- Scenario: What the server is
74
- When the following request is received:
75
- """
76
- POST /.mcp HTTP/1.1
77
- host: nex.toa.io
78
- accept: application/yaml
79
- content-type: application/json
80
- mcp-protocol-version: 2026-07-28
81
- mcp-method: server/discover
82
-
83
- {"jsonrpc": "2.0", "id": 1, "method": "server/discover",
84
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
85
- "io.modelcontextprotocol/clientCapabilities": {}}}}
86
- """
87
- Then the following reply is sent:
88
- """
89
- 200 OK
90
- cache-control: no-store
91
-
92
- jsonrpc: '2.0'
93
- id: 1
94
- result:
95
- supportedVersions:
96
- - '2026-07-28'
97
- - '2025-11-25'
98
- capabilities:
99
- tools: {}
100
- instructions: A pot is read by its id.
101
- ttlMs: 1800000
102
- cacheScope: public
103
- resultType: complete
104
- """
105
-
106
- Scenario: What a client of an earlier revision opens with
107
- No session is made, and none is named back.
108
-
109
- When the following request is received:
110
- """
111
- POST /.mcp HTTP/1.1
112
- host: nex.toa.io
113
- accept: application/yaml
114
- content-type: application/json
115
-
116
- {"jsonrpc": "2.0", "id": 1, "method": "initialize",
117
- "params": {"protocolVersion": "2025-11-25", "capabilities": {},
118
- "clientInfo": {"name": "Inspector", "version": "2.5.0"}}}
119
- """
120
- Then the following reply is sent:
121
- """
122
- 200 OK
123
-
124
- jsonrpc: '2.0'
125
- id: 1
126
- result:
127
- protocolVersion: '2025-11-25'
128
- capabilities:
129
- tools: {}
130
- serverInfo:
131
- name: Teapots
132
- instructions: A pot is read by its id.
133
- """
134
- And the reply does not contain:
135
- """
136
- mcp-session-id
137
- """
138
- When the following request is received:
139
- """
140
- POST /.mcp HTTP/1.1
141
- host: nex.toa.io
142
- content-type: application/json
143
-
144
- {"jsonrpc": "2.0", "method": "notifications/initialized"}
145
- """
146
- Then the following reply is sent:
147
- """
148
- 202 Accepted
149
- """
150
-
151
- Scenario: What the tools are
152
- Every method that is published and the caller may reach. One the caller may not, and
153
- one that is published as nothing at all, are both absent.
154
-
155
- When the following request is received:
156
- """
157
- POST /.mcp HTTP/1.1
158
- host: nex.toa.io
159
- accept: application/yaml
160
- content-type: application/json
161
- mcp-protocol-version: 2026-07-28
162
- mcp-method: tools/list
163
-
164
- {"jsonrpc": "2.0", "id": 2, "method": "tools/list",
165
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
166
- "io.modelcontextprotocol/clientCapabilities": {}}}}
167
- """
168
- Then the following reply is sent:
169
- """
170
- 200 OK
171
-
172
- jsonrpc: '2.0'
173
- id: 2
174
- result:
175
- tools:
176
- - name: pots.GET
177
- description: All the pots, newest first.
178
- inputSchema:
179
- type: object
180
- properties:
181
- query:
182
- type: object
183
- properties:
184
- criteria:
185
- type: string
186
- limit:
187
- type: integer
188
- minimum: 1
189
- maximum: 100
190
- default: 10
191
- additionalProperties: false
192
- annotations:
193
- readOnlyHint: true
194
- - name: pots.POST
195
- description: Start a new pot brewing.
196
- inputSchema:
197
- type: object
198
- properties:
199
- title:
200
- type: string
201
- maxLength: 64
202
- volume:
203
- type: number
204
- required:
205
- - title
206
- - volume
207
- additionalProperties: false
208
- - name: pots._id.GET
209
- description: One pot, by its id.
210
- inputSchema:
211
- type: object
212
- properties:
213
- id:
214
- type: string
215
- required:
216
- - id
217
- additionalProperties: false
218
- - name: pots.large.GET
219
- title: Large pots
220
- description: The pots that hold a hundred or more, newest first.
221
- annotations:
222
- readOnlyHint: true
223
- ttlMs: 1800000
224
- cacheScope: private
225
- resultType: complete
226
- """
227
- And the reply does not contain:
228
- """
229
- pots.guarded.GET
230
- """
231
- And the reply does not contain:
232
- """
233
- pots.unpublished.GET
234
- """
235
- And the reply does not contain:
236
- """
237
- Put a pot on to brew.
238
- """
239
-
240
- Scenario: A method that is published as nothing is not called by guessing its name
241
- A route the application did not publish is served over HTTP exactly as before. What it
242
- does not have is a name here, and naming it anyway reaches nothing.
243
-
244
- When the following request is received:
245
- """
246
- POST /.mcp HTTP/1.1
247
- host: nex.toa.io
248
- accept: application/yaml
249
- content-type: application/json
250
- mcp-protocol-version: 2026-07-28
251
- mcp-method: tools/call
252
- mcp-name: pots.unpublished.GET
253
-
254
- {"jsonrpc": "2.0", "id": 30, "method": "tools/call",
255
- "params": {"name": "pots.unpublished.GET", "arguments": {},
256
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
257
- "io.modelcontextprotocol/clientCapabilities": {}}}}
258
- """
259
- Then the following reply is sent:
260
- """
261
- 404 Not Found
262
-
263
- jsonrpc: '2.0'
264
- id: null
265
- error:
266
- code: -32601
267
- """
268
-
269
- Scenario: A tool that takes an identity is not listed to nobody
270
- `tools/list` answers what this caller may reach, and it is the description that decides
271
- — the same one `OPTIONS` answers. A model is not shown a tool it would be refused.
272
-
273
- Given the annotation:
274
- """yaml
275
- mcp:
276
- name: Pots
277
- anonymous: true
278
- /:
279
- anonymous: true
280
- /pots/:id:
281
- isolated: true
282
- GET:
283
- anonymous: true
284
- mcp:tool: true
285
- help:method: One pot, by its id.
286
- dev:stub: []
287
- PATCH:
288
- auth:id: id
289
- mcp:tool: true
290
- help:method: Change your own pot.
291
- dev:stub: []
292
- """
293
- When the following request is received:
294
- """
295
- POST /.mcp HTTP/1.1
296
- host: nex.toa.io
297
- accept: application/yaml
298
- content-type: application/json
299
- mcp-protocol-version: 2026-07-28
300
- mcp-method: tools/list
301
-
302
- {"jsonrpc": "2.0", "id": 3, "method": "tools/list",
303
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
304
- "io.modelcontextprotocol/clientCapabilities": {}}}}
305
- """
306
- Then the following reply is sent:
307
- """
308
- 200 OK
309
-
310
- - name: pots._id.GET
311
- """
312
- And the reply does not contain:
313
- """
314
- pots._id.PATCH
315
- """
316
-
317
- Scenario: A credential does not hide an anonymous tool
318
- A client here always presents one, and what refuses a credentialed request at an
319
- `anonymous` route is that the reply would not be cacheable — which a tool's is not.
320
-
321
- # developer:secret
322
- Given the `identity.basic` database contains:
323
- | _id | authority | username | password |
324
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
325
- And the `identity.bans` database is empty
326
- When the following request is received:
327
- """
328
- POST /.mcp HTTP/1.1
329
- host: nex.toa.io
330
- authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
331
- accept: application/yaml
332
- content-type: application/json
333
- mcp-protocol-version: 2026-07-28
334
- mcp-method: tools/list
335
-
336
- {"jsonrpc": "2.0", "id": 20, "method": "tools/list",
337
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
338
- "io.modelcontextprotocol/clientCapabilities": {}}}}
339
- """
340
- Then the following reply is sent:
341
- """
342
- 200 OK
343
-
344
- jsonrpc: '2.0'
345
- id: 20
346
- result:
347
- tools:
348
- - name: pots.GET
349
- """
350
-
351
- Scenario: A tool takes what the procedure takes
352
- When the following request is received:
353
- """
354
- POST /.mcp HTTP/1.1
355
- host: nex.toa.io
356
- accept: application/yaml
357
- content-type: application/json
358
- mcp-protocol-version: 2026-07-28
359
- mcp-method: tools/call
360
- mcp-name: pots._id.GET
361
-
362
- {"jsonrpc": "2.0", "id": 3, "method": "tools/call",
363
- "params": {"name": "pots._id.GET",
364
- "arguments": {"id": "4c4759e6f9c74da989d64511df42d6f4"},
365
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
366
- "io.modelcontextprotocol/clientCapabilities": {}}}}
367
- """
368
- Then the following reply is sent:
369
- """
370
- 200 OK
371
-
372
- jsonrpc: '2.0'
373
- id: 3
374
- result:
375
- structuredContent:
376
- id: 4c4759e6f9c74da989d64511df42d6f4
377
- title: First pot
378
- volume: 100
379
- resultType: complete
380
- """
381
-
382
- Scenario: What is left of the arguments is the input
383
- When the following request is received:
384
- """
385
- POST /.mcp HTTP/1.1
386
- host: nex.toa.io
387
- accept: application/yaml
388
- content-type: application/json
389
- mcp-protocol-version: 2026-07-28
390
- mcp-method: tools/call
391
- mcp-name: pots.POST
392
-
393
- {"jsonrpc": "2.0", "id": 4, "method": "tools/call",
394
- "params": {"name": "pots.POST", "arguments": {"title": "Kettle", "volume": 1.7},
395
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
396
- "io.modelcontextprotocol/clientCapabilities": {}}}}
397
- """
398
- Then the following reply is sent:
399
- """
400
- 200 OK
401
-
402
- jsonrpc: '2.0'
403
- id: 4
404
- result:
405
- structuredContent:
406
- id:
407
- """
408
-
409
- Scenario: A name nothing answers to
410
-
411
- When the following request is received:
412
- """
413
- POST /.mcp HTTP/1.1
414
- host: nex.toa.io
415
- accept: application/yaml
416
- content-type: application/json
417
- mcp-protocol-version: 2026-07-28
418
- mcp-method: tools/call
419
- mcp-name: kettles.GET
420
-
421
- {"jsonrpc": "2.0", "id": 5, "method": "tools/call",
422
- "params": {"name": "kettles.GET", "arguments": {},
423
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
424
- "io.modelcontextprotocol/clientCapabilities": {}}}}
425
- """
426
- Then the following reply is sent:
427
- """
428
- 404 Not Found
429
- """
430
-
431
- Scenario: A method this server does not answer
432
- The status is what tells a client that this endpoint is here and the method is not.
433
-
434
- When the following request is received:
435
- """
436
- POST /.mcp HTTP/1.1
437
- host: nex.toa.io
438
- accept: application/yaml
439
- content-type: application/json
440
- mcp-protocol-version: 2026-07-28
441
- mcp-method: prompts/list
442
-
443
- {"jsonrpc": "2.0", "id": 6, "method": "prompts/list",
444
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
445
- "io.modelcontextprotocol/clientCapabilities": {}}}}
446
- """
447
- Then the following reply is sent:
448
- """
449
- 404 Not Found
450
-
451
- jsonrpc: '2.0'
452
- id: 6
453
- error:
454
- code: -32601
455
- """
456
-
457
- Scenario: A header saying one thing and a body another
458
- What routes a request and what answers it must not be told two different things.
459
-
460
- When the following request is received:
461
- """
462
- POST /.mcp HTTP/1.1
463
- host: nex.toa.io
464
- accept: application/yaml
465
- content-type: application/json
466
- mcp-protocol-version: 2026-07-28
467
- mcp-method: tools/call
468
- mcp-name: pots.GET
469
-
470
- {"jsonrpc": "2.0", "id": 7, "method": "tools/call",
471
- "params": {"name": "pots.POST", "arguments": {},
472
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
473
- "io.modelcontextprotocol/clientCapabilities": {}}}}
474
- """
475
- Then the following reply is sent:
476
- """
477
- 400 Bad Request
478
-
479
- jsonrpc: '2.0'
480
- id: 7
481
- error:
482
- code: -32020
483
- """
484
-
485
- Scenario: A revision neither served
486
- When the following request is received:
487
- """
488
- POST /.mcp HTTP/1.1
489
- host: nex.toa.io
490
- accept: application/yaml
491
- content-type: application/json
492
- mcp-protocol-version: 1900-01-01
493
- mcp-method: tools/list
494
-
495
- {"jsonrpc": "2.0", "id": 8, "method": "tools/list", "params": {}}
496
- """
497
- Then the following reply is sent:
498
- """
499
- 400 Bad Request
500
-
501
- jsonrpc: '2.0'
502
- id: 8
503
- error:
504
- code: -32022
505
- data:
506
- supported:
507
- - '2026-07-28'
508
- - '2025-11-25'
509
- requested: '1900-01-01'
510
- """
511
-
512
- Scenario: What the endpoint does not serve
513
- A stream is what these were for, and this endpoint has none.
514
-
515
- When the following request is received:
516
- """
517
- GET /.mcp HTTP/1.1
518
- host: nex.toa.io
519
- """
520
- Then the following reply is sent:
521
- """
522
- 405 Method Not Allowed
523
- allow: POST
524
- """
525
-
526
- Scenario: Without the annotation nothing answers there
527
- Given the annotation:
528
- """yaml
529
- {}
530
- """
531
- When the following request is received:
532
- """
533
- POST /.mcp HTTP/1.1
534
- host: nex.toa.io
535
- content-type: application/json
536
-
537
- {"jsonrpc": "2.0", "id": 9, "method": "tools/list", "params": {}}
538
- """
539
- Then the following reply is sent:
540
- """
541
- 404 Not Found
542
- """
543
-
544
- Scenario: A tool the caller may not call
545
- What `auth` makes of a call is a refusal of the call, not of the credential: the model
546
- named a record that is not the caller's, which it may correct itself by naming another.
547
- A challenge here would send the client to ask for a scope that would not help.
548
-
549
- # developer:secret, who is not an `admin` and so may not reach `pots.guarded.GET`
550
- Given the `identity.basic` database contains:
551
- | _id | authority | username | password |
552
- | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
553
- And the `identity.bans` database is empty
554
- When the following request is received:
555
- """
556
- POST /.mcp HTTP/1.1
557
- host: nex.toa.io
558
- authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
559
- accept: application/yaml
560
- content-type: application/json
561
- mcp-protocol-version: 2026-07-28
562
- mcp-method: tools/call
563
- mcp-name: pots.guarded.GET
564
-
565
- {"jsonrpc": "2.0", "id": 31, "method": "tools/call",
566
- "params": {"name": "pots.guarded.GET", "arguments": {},
567
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
568
- "io.modelcontextprotocol/clientCapabilities": {}}}}
569
- """
570
- Then the following reply is sent:
571
- """
572
- 200 OK
573
-
574
- jsonrpc: '2.0'
575
- id: 31
576
- result:
577
- isError: true
578
- """
579
- And the reply does not contain:
580
- """
581
- insufficient_scope
582
- """
583
-
584
- Scenario: An argument the schemas would not take
585
- What the arguments are refused for is the model's to correct by sending others, so it
586
- is a result and not an error of the protocol.
587
-
588
- When the following request is received:
589
- """
590
- POST /.mcp HTTP/1.1
591
- host: nex.toa.io
592
- accept: application/yaml
593
- content-type: application/json
594
- mcp-protocol-version: 2026-07-28
595
- mcp-method: tools/call
596
- mcp-name: pots._id.GET
597
-
598
- {"jsonrpc": "2.0", "id": 32, "method": "tools/call",
599
- "params": {"name": "pots._id.GET",
600
- "arguments": {"id": "not-an-id"},
601
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
602
- "io.modelcontextprotocol/clientCapabilities": {}}}}
603
- """
604
- Then the following reply is sent:
605
- """
606
- 200 OK
607
-
608
- jsonrpc: '2.0'
609
- id: 32
610
- result:
611
- isError: true
612
- """
613
-
614
- Scenario: What the operation refused with
615
- A refusal is a value a model reads and may correct itself by, so it is a result rather
616
- than an error of the protocol.
617
-
618
- Given the `echo` is running with the following manifest:
619
- """yaml
620
- exposition:
621
- /:
622
- io:output: true
623
- GET:
624
- mcp:tool: true
625
- help:method:
626
- description: Refuses, with what it was given.
627
- endpoint: error
628
- """
629
- When the following request is received:
630
- """
631
- POST /.mcp HTTP/1.1
632
- host: nex.toa.io
633
- accept: application/yaml
634
- content-type: application/json
635
- mcp-protocol-version: 2026-07-28
636
- mcp-method: tools/call
637
- mcp-name: echo.GET
638
-
639
- {"jsonrpc": "2.0", "id": 10, "method": "tools/call",
640
- "params": {"name": "echo.GET", "arguments": {},
641
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
642
- "io.modelcontextprotocol/clientCapabilities": {}}}}
643
- """
644
- Then the following reply is sent:
645
- """
646
- 200 OK
647
-
648
- jsonrpc: '2.0'
649
- id: 10
650
- result:
651
- content:
652
- - type: text
653
- text: message
654
- isError: true
655
- resultType: complete
656
- """
657
-
658
- Scenario: An operation that declares no output
659
- A schema the revision would have the reply validated against is worse said emptily than
660
- left unsaid — and the reply is answered all the same.
661
-
662
- Given the `echo` is running with the following manifest:
663
- """yaml
664
- exposition:
665
- /:
666
- io:output: true
667
- GET:
668
- mcp:tool: true
669
- help:method:
670
- description: Answers with what it was given.
671
- endpoint: echo
672
- """
673
- When the following request is received:
674
- """
675
- POST /.mcp HTTP/1.1
676
- host: nex.toa.io
677
- accept: application/yaml
678
- content-type: application/json
679
- mcp-protocol-version: 2026-07-28
680
- mcp-method: tools/call
681
- mcp-name: echo.GET
682
-
683
- {"jsonrpc": "2.0", "id": 11, "method": "tools/call",
684
- "params": {"name": "echo.GET", "arguments": {"greeting": "hello"},
685
- "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
686
- "io.modelcontextprotocol/clientCapabilities": {}}}}
687
- """
688
- Then the following reply is sent:
689
- """
690
- 200 OK
691
-
692
- jsonrpc: '2.0'
693
- id: 11
694
- result:
695
- structuredContent:
696
- greeting: hello
697
- resultType: complete
698
- """
699
-
700
- Scenario: An origin that is not listed
701
- The revision requires this against DNS rebinding, and an empty list admits none.
702
-
703
- When the following request is received:
704
- """
705
- POST /.mcp HTTP/1.1
706
- host: nex.toa.io
707
- origin: https://elsewhere.example
708
- accept: application/yaml
709
- content-type: application/json
710
- mcp-protocol-version: 2026-07-28
711
- mcp-method: tools/list
712
-
713
- {"jsonrpc": "2.0", "id": 12, "method": "tools/list",
714
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
715
- "io.modelcontextprotocol/clientCapabilities": {}}}}
716
- """
717
- Then the following reply is sent:
718
- """
719
- 403 Forbidden
720
- """
721
-
722
- Scenario: Without a credential
723
- A request without one is where the authorization flow starts, so the refusal carries
724
- the document that says where to get a token.
725
-
726
- Given the annotation:
727
- """yaml
728
- authorities:
729
- nex: nex.toa.io
730
- oauth:
731
- authorize: https://app.nex.toa.io/oauth/authorize
732
- resources: ['/.mcp']
733
- mcp:
734
- name: Teapots
735
- """
736
- When the following request is received:
737
- """
738
- POST /.mcp HTTP/1.1
739
- host: nex.toa.io
740
- accept: application/yaml
741
- content-type: application/json
742
- mcp-protocol-version: 2026-07-28
743
- mcp-method: tools/list
744
-
745
- {"jsonrpc": "2.0", "id": 13, "method": "tools/list",
746
- "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
747
- "io.modelcontextprotocol/clientCapabilities": {}}}}
748
- """
749
- Then the following reply is sent:
750
- """
751
- 401 Unauthorized
752
- www-authenticate: Bearer resource_metadata="https://nex.toa.io/.well-known/oauth-protected-resource/.mcp"
753
- """