@toa.io/extensions.exposition 1.0.0-alpha.282 → 1.0.0-alpha.284

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 (667) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/components/exposition.octets/manifest.toa.yaml +11 -0
  3. package/components/exposition.octets/types/index.d.ts +3 -0
  4. package/components/exposition.octets/types/toa.d.ts +41 -0
  5. package/components/identity.bans/operations/transit.js +1 -1
  6. package/components/identity.bans/tsconfig.json +1 -1
  7. package/components/identity.bans/tsconfig.tsbuildinfo +1 -1
  8. package/components/identity.bans/types/index.d.ts +3 -0
  9. package/components/identity.bans/types/toa.d.ts +34 -0
  10. package/components/identity.basic/manifest.toa.yaml +13 -2
  11. package/components/identity.basic/operations/add.js +1 -1
  12. package/components/identity.basic/operations/authenticate.js +1 -1
  13. package/components/identity.basic/operations/check.js +1 -1
  14. package/components/identity.basic/operations/delete.js +1 -1
  15. package/components/identity.basic/operations/incept.js +18 -2
  16. package/components/identity.basic/operations/info.js +1 -1
  17. package/components/identity.basic/operations/lib/credentials.js +1 -1
  18. package/components/identity.basic/operations/transit.js +3 -2
  19. package/components/identity.basic/source/add.ts +3 -3
  20. package/components/identity.basic/source/authenticate.ts +2 -2
  21. package/components/identity.basic/source/check.ts +1 -1
  22. package/components/identity.basic/source/delete.ts +2 -2
  23. package/components/identity.basic/source/incept.ts +31 -3
  24. package/components/identity.basic/source/info.ts +1 -1
  25. package/components/identity.basic/source/transit.ts +6 -4
  26. package/components/identity.basic/tsconfig.json +1 -1
  27. package/components/identity.basic/tsconfig.tsbuildinfo +1 -1
  28. package/components/identity.basic/types/index.d.ts +22 -0
  29. package/components/identity.basic/types/toa.d.ts +121 -0
  30. package/components/identity.clients/manifest.toa.yaml +243 -0
  31. package/components/identity.clients/operations/describe.js +44 -0
  32. package/components/identity.clients/operations/lib/Context.js +2 -0
  33. package/components/identity.clients/operations/lib/Entity.js +2 -0
  34. package/components/identity.clients/operations/lib/canonical.js +24 -0
  35. package/components/identity.clients/operations/lib/cimd.js +86 -0
  36. package/components/identity.clients/operations/lib/errors.js +5 -0
  37. package/components/identity.clients/operations/lib/index.js +7 -0
  38. package/components/identity.clients/operations/lib/redirect.js +32 -0
  39. package/components/identity.clients/operations/register.js +84 -0
  40. package/components/identity.clients/source/describe.ts +65 -0
  41. package/components/identity.clients/source/lib/Context.ts +38 -0
  42. package/components/identity.clients/source/lib/Entity.ts +31 -0
  43. package/components/identity.clients/source/lib/canonical.test.ts +43 -0
  44. package/components/identity.clients/source/lib/canonical.ts +27 -0
  45. package/components/identity.clients/source/lib/cimd.test.ts +120 -0
  46. package/components/identity.clients/source/lib/cimd.ts +107 -0
  47. package/components/identity.clients/source/lib/errors.ts +4 -0
  48. package/components/identity.clients/source/lib/index.ts +6 -0
  49. package/components/identity.clients/source/lib/redirect.test.ts +41 -0
  50. package/components/identity.clients/source/lib/redirect.ts +35 -0
  51. package/components/identity.clients/source/register.ts +125 -0
  52. package/components/identity.clients/tsconfig.json +10 -0
  53. package/components/identity.clients/tsconfig.tsbuildinfo +1 -0
  54. package/components/identity.clients/types/index.d.ts +3 -0
  55. package/components/identity.clients/types/toa.d.ts +109 -0
  56. package/components/identity.credentials/operations/list.js +1 -1
  57. package/components/identity.credentials/source/list.ts +2 -1
  58. package/components/identity.credentials/tsconfig.json +4 -2
  59. package/components/identity.credentials/tsconfig.tsbuildinfo +1 -1
  60. package/components/identity.credentials/types/index.d.ts +3 -0
  61. package/components/identity.credentials/types/toa.d.ts +30 -0
  62. package/components/identity.federation/manifest.toa.yaml +37 -1
  63. package/components/identity.federation/operations/authenticate.js +7 -3
  64. package/components/identity.federation/operations/create.js +1 -1
  65. package/components/identity.federation/operations/decode.js +1 -1
  66. package/components/identity.federation/operations/delete.js +1 -1
  67. package/components/identity.federation/operations/incept.js +6 -2
  68. package/components/identity.federation/operations/lib/Configuration.js +1 -1
  69. package/components/identity.federation/operations/lib/Ctx.js +1 -1
  70. package/components/identity.federation/operations/lib/Payload.js +1 -1
  71. package/components/identity.federation/operations/lib/decode.js +23 -9
  72. package/components/identity.federation/operations/lib/discovery.js +1 -1
  73. package/components/identity.federation/operations/lib/errors.js +5 -1
  74. package/components/identity.federation/operations/lib/exchange.js +12 -7
  75. package/components/identity.federation/operations/lib/index.js +2 -1
  76. package/components/identity.federation/operations/lib/jose.js +1 -1
  77. package/components/identity.federation/operations/lib/principal.js +14 -0
  78. package/components/identity.federation/operations/lib/resolve.js +1 -1
  79. package/components/identity.federation/operations/list.js +1 -1
  80. package/components/identity.federation/operations/types/Scheme.js +1 -1
  81. package/components/identity.federation/operations/types/configuration.js +1 -1
  82. package/components/identity.federation/operations/types/context.js +1 -1
  83. package/components/identity.federation/operations/types/entity.js +1 -1
  84. package/components/identity.federation/operations/types/index.js +1 -1
  85. package/components/identity.federation/source/authenticate.ts +9 -3
  86. package/components/identity.federation/source/incept.ts +7 -1
  87. package/components/identity.federation/source/lib/Ctx.ts +2 -2
  88. package/components/identity.federation/source/lib/decode.ts +25 -9
  89. package/components/identity.federation/source/lib/errors.ts +5 -0
  90. package/components/identity.federation/source/lib/exchange.ts +11 -7
  91. package/components/identity.federation/source/lib/index.ts +1 -0
  92. package/components/identity.federation/source/lib/principal.ts +17 -0
  93. package/components/identity.federation/source/types/configuration.ts +1 -1
  94. package/components/identity.federation/source/types/context.ts +6 -2
  95. package/components/identity.federation/tsconfig.json +4 -2
  96. package/components/identity.federation/tsconfig.tsbuildinfo +1 -1
  97. package/components/identity.federation/types/index.d.ts +3 -0
  98. package/components/identity.federation/types/toa.d.ts +127 -0
  99. package/components/identity.grants/manifest.toa.yaml +245 -0
  100. package/components/identity.grants/operations/authorize.js +54 -0
  101. package/components/identity.grants/operations/exchange.js +89 -0
  102. package/components/identity.grants/operations/lib/code.js +30 -0
  103. package/components/identity.grants/operations/lib/identify.js +15 -0
  104. package/components/identity.grants/operations/lib/index.js +3 -0
  105. package/components/identity.grants/operations/list.js +18 -0
  106. package/components/identity.grants/operations/revoke.js +25 -0
  107. package/components/identity.grants/source/authorize.ts +90 -0
  108. package/components/identity.grants/source/exchange.ts +130 -0
  109. package/components/identity.grants/source/lib/code.ts +39 -0
  110. package/components/identity.grants/source/lib/identify.ts +16 -0
  111. package/components/identity.grants/source/lib/index.ts +3 -0
  112. package/components/identity.grants/source/list.ts +28 -0
  113. package/components/identity.grants/source/revoke.ts +38 -0
  114. package/components/identity.grants/tsconfig.json +10 -0
  115. package/components/identity.grants/tsconfig.tsbuildinfo +1 -0
  116. package/components/identity.grants/types/index.d.ts +60 -0
  117. package/components/identity.grants/types/toa.d.ts +108 -0
  118. package/components/identity.keys/manifest.toa.yaml +1 -0
  119. package/components/identity.keys/operations/create.js +1 -1
  120. package/components/identity.keys/operations/disable.js +1 -1
  121. package/components/identity.keys/operations/revoke.js +1 -1
  122. package/components/identity.keys/source/create.ts +1 -1
  123. package/components/identity.keys/source/revoke.ts +1 -1
  124. package/components/identity.keys/tsconfig.json +1 -1
  125. package/components/identity.keys/tsconfig.tsbuildinfo +1 -1
  126. package/components/identity.keys/types/index.d.ts +3 -0
  127. package/components/identity.keys/types/toa.d.ts +47 -0
  128. package/components/identity.otp/operations/authenticate.js +1 -1
  129. package/components/identity.otp/operations/issue.js +1 -1
  130. package/components/identity.otp/operations/lib/Context.js +1 -1
  131. package/components/identity.otp/operations/lib/Entity.js +1 -1
  132. package/components/identity.otp/operations/lib/index.js +1 -1
  133. package/components/identity.otp/source/lib/Context.ts +4 -2
  134. package/components/identity.otp/tsconfig.json +1 -1
  135. package/components/identity.otp/tsconfig.tsbuildinfo +1 -1
  136. package/components/identity.otp/types/index.d.ts +3 -0
  137. package/components/identity.otp/types/toa.d.ts +56 -0
  138. package/components/identity.passkeys/manifest.toa.yaml +3 -0
  139. package/components/identity.passkeys/operations/authenticate.js +1 -1
  140. package/components/identity.passkeys/operations/challenge.js +1 -1
  141. package/components/identity.passkeys/operations/create.js +1 -1
  142. package/components/identity.passkeys/operations/delete.js +1 -1
  143. package/components/identity.passkeys/operations/lib/const.js +1 -1
  144. package/components/identity.passkeys/operations/list.js +1 -1
  145. package/components/identity.passkeys/operations/types/Configuration.js +1 -1
  146. package/components/identity.passkeys/operations/types/Context.js +1 -1
  147. package/components/identity.passkeys/operations/types/Passkey.js +1 -1
  148. package/components/identity.passkeys/operations/types/index.js +1 -1
  149. package/components/identity.passkeys/operations/use.js +1 -1
  150. package/components/identity.passkeys/source/authenticate.ts +1 -1
  151. package/components/identity.passkeys/source/challenge.ts +1 -1
  152. package/components/identity.passkeys/source/create.ts +1 -1
  153. package/components/identity.passkeys/source/types/Context.ts +2 -1
  154. package/components/identity.passkeys/source/use.ts +1 -1
  155. package/components/identity.passkeys/tsconfig.json +1 -1
  156. package/components/identity.passkeys/tsconfig.tsbuildinfo +1 -1
  157. package/components/identity.passkeys/types/index.d.ts +3 -0
  158. package/components/identity.passkeys/types/toa.d.ts +120 -0
  159. package/components/identity.roles/operations/grant.js +1 -1
  160. package/components/identity.roles/operations/lib/Entity.js +1 -1
  161. package/components/identity.roles/operations/list.js +1 -1
  162. package/components/identity.roles/operations/principal.js +29 -5
  163. package/components/identity.roles/source/principal.ts +33 -5
  164. package/components/identity.roles/tsconfig.json +1 -1
  165. package/components/identity.roles/tsconfig.tsbuildinfo +1 -1
  166. package/components/identity.roles/types/index.d.ts +3 -0
  167. package/components/identity.roles/types/toa.d.ts +43 -0
  168. package/components/identity.tokens/manifest.toa.yaml +34 -3
  169. package/components/identity.tokens/operations/authenticate.js +9 -1
  170. package/components/identity.tokens/operations/decrypt.js +3 -3
  171. package/components/identity.tokens/operations/encrypt.js +1 -1
  172. package/components/identity.tokens/operations/issue.js +3 -2
  173. package/components/identity.tokens/operations/lib/form.js +24 -0
  174. package/components/identity.tokens/operations/lib/index.js +2 -2
  175. package/components/identity.tokens/operations/lib/jose.js +1 -1
  176. package/components/identity.tokens/operations/lib/key.js +1 -1
  177. package/components/identity.tokens/operations/lib/pad.js +1 -1
  178. package/components/identity.tokens/operations/revoke.js +1 -1
  179. package/components/identity.tokens/source/authenticate.test.ts +8 -5
  180. package/components/identity.tokens/source/authenticate.ts +12 -1
  181. package/components/identity.tokens/source/decrypt.test.ts +1 -1
  182. package/components/identity.tokens/source/decrypt.ts +4 -3
  183. package/components/identity.tokens/source/encrypt.test.ts +1 -1
  184. package/components/identity.tokens/source/encrypt.ts +2 -1
  185. package/components/identity.tokens/source/issue.test.ts +71 -0
  186. package/components/identity.tokens/source/issue.ts +4 -2
  187. package/components/identity.tokens/source/lib/form.test.ts +25 -0
  188. package/components/identity.tokens/source/lib/form.ts +31 -0
  189. package/components/identity.tokens/source/lib/index.ts +2 -1
  190. package/components/identity.tokens/tsconfig.json +1 -1
  191. package/components/identity.tokens/tsconfig.tsbuildinfo +1 -1
  192. package/components/identity.tokens/types/index.d.ts +61 -0
  193. package/components/identity.tokens/types/toa.d.ts +113 -0
  194. package/documentation/access.md +13 -0
  195. package/documentation/cache.md +10 -1
  196. package/documentation/components.md +3 -0
  197. package/documentation/consent.md +101 -0
  198. package/documentation/identity.md +3 -1
  199. package/documentation/introspection.md +13 -5
  200. package/documentation/io.md +42 -2
  201. package/documentation/map.md +8 -0
  202. package/documentation/mcp.md +180 -0
  203. package/documentation/oauth.md +180 -0
  204. package/documentation/protocol.md +4 -0
  205. package/documentation/rpc.md +140 -0
  206. package/documentation/tree.md +3 -0
  207. package/features/auth.bearer.feature +120 -0
  208. package/features/cache.feature +46 -0
  209. package/features/identity.basic.feature +44 -0
  210. package/features/identity.federation.feature +2 -5
  211. package/features/introspection.feature +333 -0
  212. package/features/mcp.feature +687 -0
  213. package/features/oauth.clients.feature +195 -0
  214. package/features/oauth.discovery.feature +164 -0
  215. package/features/oauth.grants.feature +299 -0
  216. package/features/octets.cloudinary.feature +1 -0
  217. package/features/rpc.feature +429 -0
  218. package/features/steps/Cloudinary.ts +13 -0
  219. package/features/steps/Components.ts +0 -4
  220. package/features/steps/Gateway.ts +23 -2
  221. package/features/steps/Parameters.ts +22 -7
  222. package/features/steps/Realtime.ts +3 -0
  223. package/features/steps/components/echo/manifest.toa.yaml +3 -0
  224. package/features/steps/components/octets.tester/manifest.toa.yaml +2 -0
  225. package/features/steps/components/octets.tester/operations/redirect.js +6 -1
  226. package/features/steps/components/pots/manifest.toa.yaml +2 -0
  227. package/features/steps/components/users/manifest.toa.yaml +1 -0
  228. package/package.json +8 -6
  229. package/readme.md +6 -0
  230. package/schemas/annotation.cos.yaml +63 -0
  231. package/schemas/call.cos.yaml +18 -0
  232. package/source/Annotation.ts +54 -0
  233. package/source/Directive.test.ts +15 -15
  234. package/source/Directive.ts +77 -9
  235. package/source/Endpoint.test.ts +67 -0
  236. package/source/Endpoint.ts +31 -11
  237. package/source/Factory.ts +6 -2
  238. package/source/Gateway.ts +73 -11
  239. package/source/HTTP/Context.ts +7 -0
  240. package/source/HTTP/Server.ts +15 -5
  241. package/source/HTTP/exceptions.ts +2 -2
  242. package/source/HTTP/formats/form.ts +21 -0
  243. package/source/HTTP/formats/index.ts +17 -2
  244. package/source/HTTP/messages.test.ts +25 -1
  245. package/source/HTTP/messages.ts +20 -4
  246. package/source/Interception.ts +8 -2
  247. package/source/Introspection.ts +102 -0
  248. package/source/MCP/Server.ts +275 -0
  249. package/source/MCP/discover.ts +52 -0
  250. package/source/MCP/errors.ts +81 -0
  251. package/source/MCP/index.ts +1 -0
  252. package/source/MCP/schema.test.ts +85 -0
  253. package/source/MCP/schema.ts +87 -0
  254. package/source/MCP/tools.ts +156 -0
  255. package/source/MCP/types.ts +81 -0
  256. package/source/Query.ts +48 -8
  257. package/source/RPC/Context.ts +78 -0
  258. package/source/RPC/Dispatcher.ts +130 -0
  259. package/source/RPC/errors.test.ts +52 -0
  260. package/source/RPC/errors.ts +83 -0
  261. package/source/RPC/index.ts +1 -0
  262. package/source/RPC/names.test.ts +122 -0
  263. package/source/RPC/names.ts +182 -0
  264. package/source/RPC/types.ts +34 -0
  265. package/source/RTD/Directives.ts +52 -2
  266. package/source/RTD/Endpoint.ts +2 -1
  267. package/source/RTD/Method.ts +14 -11
  268. package/source/RTD/Node.ts +38 -7
  269. package/source/RTD/Route.ts +30 -3
  270. package/source/RTD/Tree.ts +37 -1
  271. package/source/RTD/expiration.test.ts +1 -1
  272. package/source/RTD/walk.test.ts +110 -0
  273. package/source/const.ts +15 -0
  274. package/source/deployment.ts +11 -1
  275. package/source/directives/auth/Anonymous.test.ts +38 -0
  276. package/source/directives/auth/Anonymous.ts +12 -0
  277. package/source/directives/auth/Anyone.ts +4 -0
  278. package/source/directives/auth/Authorization.ts +108 -22
  279. package/source/directives/auth/Delegate.test.ts +36 -0
  280. package/source/directives/auth/Delegate.ts +14 -0
  281. package/source/directives/auth/Echo.ts +5 -0
  282. package/source/directives/auth/Incept.ts +16 -10
  283. package/source/directives/auth/Role.ts +13 -0
  284. package/source/directives/auth/Rule.ts +29 -0
  285. package/source/directives/auth/Scheme.ts +5 -0
  286. package/source/directives/auth/schemes.test.ts +8 -4
  287. package/source/directives/auth/schemes.ts +22 -9
  288. package/source/directives/auth/types.ts +26 -2
  289. package/source/directives/cache/Cache.ts +14 -5
  290. package/source/directives/cache/Control.ts +0 -3
  291. package/source/directives/dev/Development.ts +1 -1
  292. package/source/directives/flow/Fetch.ts +1 -1
  293. package/source/directives/flow/Flow.ts +1 -1
  294. package/source/directives/index.ts +5 -2
  295. package/source/directives/io/Directive.ts +1 -1
  296. package/source/directives/io/IO.ts +34 -3
  297. package/source/directives/io/Input.ts +3 -2
  298. package/source/directives/io/Output.ts +10 -4
  299. package/source/directives/io/Status.test.ts +84 -0
  300. package/source/directives/io/Status.ts +46 -0
  301. package/source/directives/io/Throttle.ts +1 -1
  302. package/source/directives/io/lib/throttle/Quotas.ts +2 -2
  303. package/source/directives/map/Headers.ts +11 -0
  304. package/source/directives/map/Map.ts +10 -1
  305. package/source/directives/map/Mapping.ts +23 -0
  306. package/source/directives/map/Segments.ts +12 -0
  307. package/source/directives/mcp/MCP.ts +33 -0
  308. package/source/directives/mcp/Tool.test.ts +66 -0
  309. package/source/directives/mcp/Tool.ts +28 -0
  310. package/source/directives/mcp/index.ts +6 -0
  311. package/source/directives/oauth/Discovery.ts +70 -0
  312. package/source/directives/oauth/documents.ts +113 -0
  313. package/source/directives/oauth/index.ts +3 -0
  314. package/source/directives/octets/Delete.ts +1 -1
  315. package/source/directives/octets/Get.ts +1 -1
  316. package/source/directives/octets/Octets.ts +1 -1
  317. package/source/directives/octets/Workflow.ts +1 -1
  318. package/source/directives/octets/workflows/Execution.ts +1 -1
  319. package/source/directives/require/Directive.ts +1 -1
  320. package/source/directives/require/Headers.ts +1 -1
  321. package/source/directives/require/Require.ts +2 -2
  322. package/source/index.ts +6 -0
  323. package/source/octets.d.ts +17 -0
  324. package/source/schemas.ts +2 -0
  325. package/source/userland.ts +47 -0
  326. package/transpiled/Annotation.d.ts +41 -0
  327. package/transpiled/Directive.d.ts +18 -1
  328. package/transpiled/Directive.js +50 -6
  329. package/transpiled/Directive.js.map +1 -1
  330. package/transpiled/Endpoint.d.ts +9 -0
  331. package/transpiled/Endpoint.js +27 -11
  332. package/transpiled/Endpoint.js.map +1 -1
  333. package/transpiled/Factory.js +6 -2
  334. package/transpiled/Factory.js.map +1 -1
  335. package/transpiled/Gateway.d.ts +19 -2
  336. package/transpiled/Gateway.js +51 -9
  337. package/transpiled/Gateway.js.map +1 -1
  338. package/transpiled/HTTP/Context.d.ts +6 -0
  339. package/transpiled/HTTP/Context.js +6 -0
  340. package/transpiled/HTTP/Context.js.map +1 -1
  341. package/transpiled/HTTP/Server.d.ts +8 -1
  342. package/transpiled/HTTP/Server.js +4 -3
  343. package/transpiled/HTTP/Server.js.map +1 -1
  344. package/transpiled/HTTP/exceptions.d.ts +1 -1
  345. package/transpiled/HTTP/exceptions.js +2 -2
  346. package/transpiled/HTTP/exceptions.js.map +1 -1
  347. package/transpiled/HTTP/formats/form.d.ts +9 -0
  348. package/transpiled/HTTP/formats/form.js +18 -0
  349. package/transpiled/HTTP/formats/form.js.map +1 -0
  350. package/transpiled/HTTP/formats/index.d.ts +10 -2
  351. package/transpiled/HTTP/formats/index.js +10 -0
  352. package/transpiled/HTTP/formats/index.js.map +1 -1
  353. package/transpiled/HTTP/messages.d.ts +12 -0
  354. package/transpiled/HTTP/messages.js +12 -4
  355. package/transpiled/HTTP/messages.js.map +1 -1
  356. package/transpiled/Interception.d.ts +4 -1
  357. package/transpiled/Interception.js +4 -2
  358. package/transpiled/Interception.js.map +1 -1
  359. package/transpiled/Introspection.d.ts +40 -0
  360. package/transpiled/Introspection.js +50 -1
  361. package/transpiled/Introspection.js.map +1 -1
  362. package/transpiled/MCP/Server.d.ts +41 -0
  363. package/transpiled/MCP/Server.js +180 -0
  364. package/transpiled/MCP/Server.js.map +1 -0
  365. package/transpiled/MCP/discover.d.ts +13 -0
  366. package/transpiled/MCP/discover.js +29 -0
  367. package/transpiled/MCP/discover.js.map +1 -0
  368. package/transpiled/MCP/errors.d.ts +24 -0
  369. package/transpiled/MCP/errors.js +67 -0
  370. package/transpiled/MCP/errors.js.map +1 -0
  371. package/transpiled/MCP/index.d.ts +1 -0
  372. package/transpiled/MCP/index.js +2 -0
  373. package/transpiled/MCP/index.js.map +1 -0
  374. package/transpiled/MCP/schema.d.ts +18 -0
  375. package/transpiled/MCP/schema.js +64 -0
  376. package/transpiled/MCP/schema.js.map +1 -0
  377. package/transpiled/MCP/tools.d.ts +31 -0
  378. package/transpiled/MCP/tools.js +121 -0
  379. package/transpiled/MCP/tools.js.map +1 -0
  380. package/transpiled/MCP/types.d.ts +64 -0
  381. package/transpiled/MCP/types.js +13 -0
  382. package/transpiled/MCP/types.js.map +1 -0
  383. package/transpiled/Query.d.ts +7 -0
  384. package/transpiled/Query.js +38 -7
  385. package/transpiled/Query.js.map +1 -1
  386. package/transpiled/RPC/Context.d.ts +11 -0
  387. package/transpiled/RPC/Context.js +63 -0
  388. package/transpiled/RPC/Context.js.map +1 -0
  389. package/transpiled/RPC/Dispatcher.d.ts +19 -0
  390. package/transpiled/RPC/Dispatcher.js +100 -0
  391. package/transpiled/RPC/Dispatcher.js.map +1 -0
  392. package/transpiled/RPC/errors.d.ts +18 -0
  393. package/transpiled/RPC/errors.js +67 -0
  394. package/transpiled/RPC/errors.js.map +1 -0
  395. package/transpiled/RPC/index.d.ts +1 -0
  396. package/transpiled/RPC/index.js +2 -0
  397. package/transpiled/RPC/index.js.map +1 -0
  398. package/transpiled/RPC/names.d.ts +30 -0
  399. package/transpiled/RPC/names.js +121 -0
  400. package/transpiled/RPC/names.js.map +1 -0
  401. package/transpiled/RPC/types.d.ts +27 -0
  402. package/transpiled/RPC/types.js +8 -0
  403. package/transpiled/RPC/types.js.map +1 -0
  404. package/transpiled/RTD/Directives.d.ts +41 -2
  405. package/transpiled/RTD/Endpoint.d.ts +2 -1
  406. package/transpiled/RTD/Method.d.ts +8 -3
  407. package/transpiled/RTD/Method.js +12 -10
  408. package/transpiled/RTD/Method.js.map +1 -1
  409. package/transpiled/RTD/Node.d.ts +20 -2
  410. package/transpiled/RTD/Node.js +22 -4
  411. package/transpiled/RTD/Node.js.map +1 -1
  412. package/transpiled/RTD/Route.d.ts +2 -1
  413. package/transpiled/RTD/Route.js +27 -2
  414. package/transpiled/RTD/Route.js.map +1 -1
  415. package/transpiled/RTD/Tree.d.ts +3 -1
  416. package/transpiled/RTD/Tree.js +26 -0
  417. package/transpiled/RTD/Tree.js.map +1 -1
  418. package/transpiled/const.d.ts +12 -0
  419. package/transpiled/const.js +12 -0
  420. package/transpiled/const.js.map +1 -1
  421. package/transpiled/deployment.js +6 -0
  422. package/transpiled/deployment.js.map +1 -1
  423. package/transpiled/directives/auth/Anonymous.d.ts +6 -0
  424. package/transpiled/directives/auth/Anonymous.js +10 -0
  425. package/transpiled/directives/auth/Anonymous.js.map +1 -1
  426. package/transpiled/directives/auth/Anyone.d.ts +1 -0
  427. package/transpiled/directives/auth/Anyone.js +3 -0
  428. package/transpiled/directives/auth/Anyone.js.map +1 -1
  429. package/transpiled/directives/auth/Authorization.d.ts +28 -2
  430. package/transpiled/directives/auth/Authorization.js +87 -19
  431. package/transpiled/directives/auth/Authorization.js.map +1 -1
  432. package/transpiled/directives/auth/Delegate.d.ts +5 -0
  433. package/transpiled/directives/auth/Delegate.js +10 -0
  434. package/transpiled/directives/auth/Delegate.js.map +1 -1
  435. package/transpiled/directives/auth/Echo.d.ts +2 -0
  436. package/transpiled/directives/auth/Echo.js +4 -0
  437. package/transpiled/directives/auth/Echo.js.map +1 -1
  438. package/transpiled/directives/auth/Incept.d.ts +1 -1
  439. package/transpiled/directives/auth/Incept.js +13 -8
  440. package/transpiled/directives/auth/Incept.js.map +1 -1
  441. package/transpiled/directives/auth/Role.d.ts +2 -0
  442. package/transpiled/directives/auth/Role.js +9 -0
  443. package/transpiled/directives/auth/Role.js.map +1 -1
  444. package/transpiled/directives/auth/Rule.d.ts +5 -0
  445. package/transpiled/directives/auth/Rule.js +20 -0
  446. package/transpiled/directives/auth/Rule.js.map +1 -1
  447. package/transpiled/directives/auth/Scheme.d.ts +2 -0
  448. package/transpiled/directives/auth/Scheme.js +4 -0
  449. package/transpiled/directives/auth/Scheme.js.map +1 -1
  450. package/transpiled/directives/auth/schemes.d.ts +16 -4
  451. package/transpiled/directives/auth/schemes.js +20 -8
  452. package/transpiled/directives/auth/schemes.js.map +1 -1
  453. package/transpiled/directives/auth/types.d.ts +20 -2
  454. package/transpiled/directives/cache/Cache.d.ts +1 -1
  455. package/transpiled/directives/cache/Cache.js +10 -3
  456. package/transpiled/directives/cache/Cache.js.map +1 -1
  457. package/transpiled/directives/cache/Control.js +0 -2
  458. package/transpiled/directives/cache/Control.js.map +1 -1
  459. package/transpiled/directives/dev/Development.d.ts +1 -1
  460. package/transpiled/directives/dev/Development.js +1 -1
  461. package/transpiled/directives/dev/Development.js.map +1 -1
  462. package/transpiled/directives/flow/Flow.d.ts +1 -1
  463. package/transpiled/directives/flow/Flow.js +1 -1
  464. package/transpiled/directives/flow/Flow.js.map +1 -1
  465. package/transpiled/directives/index.js +4 -2
  466. package/transpiled/directives/index.js.map +1 -1
  467. package/transpiled/directives/io/Directive.d.ts +1 -1
  468. package/transpiled/directives/io/IO.d.ts +7 -1
  469. package/transpiled/directives/io/IO.js +25 -3
  470. package/transpiled/directives/io/IO.js.map +1 -1
  471. package/transpiled/directives/io/Input.d.ts +3 -2
  472. package/transpiled/directives/io/Input.js +2 -1
  473. package/transpiled/directives/io/Input.js.map +1 -1
  474. package/transpiled/directives/io/Output.d.ts +5 -3
  475. package/transpiled/directives/io/Output.js +8 -3
  476. package/transpiled/directives/io/Output.js.map +1 -1
  477. package/transpiled/directives/io/Status.d.ts +19 -0
  478. package/transpiled/directives/io/Status.js +34 -0
  479. package/transpiled/directives/io/Status.js.map +1 -0
  480. package/transpiled/directives/io/Throttle.d.ts +1 -1
  481. package/transpiled/directives/io/Throttle.js +1 -1
  482. package/transpiled/directives/io/Throttle.js.map +1 -1
  483. package/transpiled/directives/io/lib/throttle/Quotas.d.ts +1 -1
  484. package/transpiled/directives/io/lib/throttle/Quotas.js +2 -2
  485. package/transpiled/directives/io/lib/throttle/Quotas.js.map +1 -1
  486. package/transpiled/directives/map/Headers.d.ts +2 -0
  487. package/transpiled/directives/map/Headers.js +8 -0
  488. package/transpiled/directives/map/Headers.js.map +1 -1
  489. package/transpiled/directives/map/Map.d.ts +3 -1
  490. package/transpiled/directives/map/Map.js +7 -1
  491. package/transpiled/directives/map/Map.js.map +1 -1
  492. package/transpiled/directives/map/Mapping.d.ts +13 -0
  493. package/transpiled/directives/map/Mapping.js +20 -0
  494. package/transpiled/directives/map/Mapping.js.map +1 -1
  495. package/transpiled/directives/map/Segments.d.ts +3 -0
  496. package/transpiled/directives/map/Segments.js +9 -0
  497. package/transpiled/directives/map/Segments.js.map +1 -1
  498. package/transpiled/directives/mcp/MCP.d.ts +15 -0
  499. package/transpiled/directives/mcp/MCP.js +23 -0
  500. package/transpiled/directives/mcp/MCP.js.map +1 -0
  501. package/transpiled/directives/mcp/Tool.d.ts +13 -0
  502. package/transpiled/directives/mcp/Tool.js +23 -0
  503. package/transpiled/directives/mcp/Tool.js.map +1 -0
  504. package/transpiled/directives/mcp/index.d.ts +4 -0
  505. package/transpiled/directives/mcp/index.js +4 -0
  506. package/transpiled/directives/mcp/index.js.map +1 -0
  507. package/transpiled/directives/oauth/Discovery.d.ts +23 -0
  508. package/transpiled/directives/oauth/Discovery.js +55 -0
  509. package/transpiled/directives/oauth/Discovery.js.map +1 -0
  510. package/transpiled/directives/oauth/documents.d.ts +9 -0
  511. package/transpiled/directives/oauth/documents.js +82 -0
  512. package/transpiled/directives/oauth/documents.js.map +1 -0
  513. package/transpiled/directives/oauth/index.d.ts +2 -0
  514. package/transpiled/directives/oauth/index.js +3 -0
  515. package/transpiled/directives/oauth/index.js.map +1 -0
  516. package/transpiled/directives/octets/Octets.d.ts +1 -1
  517. package/transpiled/directives/octets/Octets.js +1 -1
  518. package/transpiled/directives/octets/Octets.js.map +1 -1
  519. package/transpiled/directives/require/Directive.d.ts +1 -1
  520. package/transpiled/directives/require/Headers.d.ts +1 -1
  521. package/transpiled/directives/require/Headers.js +1 -1
  522. package/transpiled/directives/require/Headers.js.map +1 -1
  523. package/transpiled/directives/require/Require.d.ts +1 -1
  524. package/transpiled/directives/require/Require.js +2 -2
  525. package/transpiled/directives/require/Require.js.map +1 -1
  526. package/transpiled/index.d.ts +2 -0
  527. package/transpiled/schemas.d.ts +2 -0
  528. package/transpiled/schemas.js +1 -0
  529. package/transpiled/schemas.js.map +1 -1
  530. package/transpiled/userland.d.ts +39 -0
  531. package/transpiled/userland.js +7 -0
  532. package/transpiled/userland.js.map +1 -0
  533. package/tsconfig.tsbuildinfo +1 -1
  534. package/components/identity.bans/operations/transit.d.ts +0 -14
  535. package/components/identity.bans/operations/transit.js.map +0 -1
  536. package/components/identity.basic/operations/add.d.ts +0 -3
  537. package/components/identity.basic/operations/add.js.map +0 -1
  538. package/components/identity.basic/operations/authenticate.d.ts +0 -13
  539. package/components/identity.basic/operations/authenticate.js.map +0 -1
  540. package/components/identity.basic/operations/check.d.ts +0 -7
  541. package/components/identity.basic/operations/check.js.map +0 -1
  542. package/components/identity.basic/operations/delete.d.ts +0 -7
  543. package/components/identity.basic/operations/delete.js.map +0 -1
  544. package/components/identity.basic/operations/incept.d.ts +0 -12
  545. package/components/identity.basic/operations/incept.js.map +0 -1
  546. package/components/identity.basic/operations/info.d.ts +0 -10
  547. package/components/identity.basic/operations/info.js.map +0 -1
  548. package/components/identity.basic/operations/lib/credentials.d.ts +0 -5
  549. package/components/identity.basic/operations/lib/credentials.js.map +0 -1
  550. package/components/identity.basic/operations/transit.d.ts +0 -14
  551. package/components/identity.basic/operations/transit.js.map +0 -1
  552. package/components/identity.basic/operations/types.d.ts +0 -61
  553. package/components/identity.basic/operations/types.js +0 -2
  554. package/components/identity.basic/operations/types.js.map +0 -1
  555. package/components/identity.basic/source/types.ts +0 -69
  556. package/components/identity.credentials/operations/list.d.ts +0 -51
  557. package/components/identity.credentials/operations/list.js.map +0 -1
  558. package/components/identity.federation/operations/authenticate.d.ts +0 -16
  559. package/components/identity.federation/operations/authenticate.js.map +0 -1
  560. package/components/identity.federation/operations/create.d.ts +0 -8
  561. package/components/identity.federation/operations/create.js.map +0 -1
  562. package/components/identity.federation/operations/decode.d.ts +0 -3
  563. package/components/identity.federation/operations/decode.js.map +0 -1
  564. package/components/identity.federation/operations/delete.d.ts +0 -8
  565. package/components/identity.federation/operations/delete.js.map +0 -1
  566. package/components/identity.federation/operations/incept.d.ts +0 -11
  567. package/components/identity.federation/operations/incept.js.map +0 -1
  568. package/components/identity.federation/operations/lib/Configuration.d.ts +0 -39
  569. package/components/identity.federation/operations/lib/Configuration.js.map +0 -1
  570. package/components/identity.federation/operations/lib/Ctx.d.ts +0 -8
  571. package/components/identity.federation/operations/lib/Ctx.js.map +0 -1
  572. package/components/identity.federation/operations/lib/Payload.d.ts +0 -5
  573. package/components/identity.federation/operations/lib/Payload.js.map +0 -1
  574. package/components/identity.federation/operations/lib/decode.d.ts +0 -3
  575. package/components/identity.federation/operations/lib/decode.js.map +0 -1
  576. package/components/identity.federation/operations/lib/discovery.d.ts +0 -5
  577. package/components/identity.federation/operations/lib/discovery.js.map +0 -1
  578. package/components/identity.federation/operations/lib/errors.d.ts +0 -70
  579. package/components/identity.federation/operations/lib/errors.js.map +0 -1
  580. package/components/identity.federation/operations/lib/exchange.d.ts +0 -3
  581. package/components/identity.federation/operations/lib/exchange.js.map +0 -1
  582. package/components/identity.federation/operations/lib/index.d.ts +0 -4
  583. package/components/identity.federation/operations/lib/index.js.map +0 -1
  584. package/components/identity.federation/operations/lib/jose.d.ts +0 -1
  585. package/components/identity.federation/operations/lib/jose.js.map +0 -1
  586. package/components/identity.federation/operations/lib/resolve.d.ts +0 -3
  587. package/components/identity.federation/operations/lib/resolve.js.map +0 -1
  588. package/components/identity.federation/operations/list.d.ts +0 -7
  589. package/components/identity.federation/operations/list.js.map +0 -1
  590. package/components/identity.federation/operations/types/Scheme.d.ts +0 -1
  591. package/components/identity.federation/operations/types/Scheme.js.map +0 -1
  592. package/components/identity.federation/operations/types/configuration.d.ts +0 -22
  593. package/components/identity.federation/operations/types/configuration.js.map +0 -1
  594. package/components/identity.federation/operations/types/context.d.ts +0 -35
  595. package/components/identity.federation/operations/types/context.js.map +0 -1
  596. package/components/identity.federation/operations/types/entity.d.ts +0 -9
  597. package/components/identity.federation/operations/types/entity.js.map +0 -1
  598. package/components/identity.federation/operations/types/index.d.ts +0 -4
  599. package/components/identity.federation/operations/types/index.js.map +0 -1
  600. package/components/identity.keys/operations/create.d.ts +0 -22
  601. package/components/identity.keys/operations/create.js.map +0 -1
  602. package/components/identity.keys/operations/disable.d.ts +0 -5
  603. package/components/identity.keys/operations/disable.js.map +0 -1
  604. package/components/identity.keys/operations/revoke.d.ts +0 -15
  605. package/components/identity.keys/operations/revoke.js.map +0 -1
  606. package/components/identity.otp/operations/authenticate.d.ts +0 -12
  607. package/components/identity.otp/operations/authenticate.js.map +0 -1
  608. package/components/identity.otp/operations/issue.d.ts +0 -12
  609. package/components/identity.otp/operations/issue.js.map +0 -1
  610. package/components/identity.otp/operations/lib/Context.d.ts +0 -14
  611. package/components/identity.otp/operations/lib/Context.js.map +0 -1
  612. package/components/identity.otp/operations/lib/Entity.d.ts +0 -6
  613. package/components/identity.otp/operations/lib/Entity.js.map +0 -1
  614. package/components/identity.otp/operations/lib/index.d.ts +0 -1
  615. package/components/identity.otp/operations/lib/index.js.map +0 -1
  616. package/components/identity.passkeys/operations/authenticate.d.ts +0 -16
  617. package/components/identity.passkeys/operations/authenticate.js.map +0 -1
  618. package/components/identity.passkeys/operations/challenge.d.ts +0 -35
  619. package/components/identity.passkeys/operations/challenge.js.map +0 -1
  620. package/components/identity.passkeys/operations/create.d.ts +0 -19
  621. package/components/identity.passkeys/operations/create.js.map +0 -1
  622. package/components/identity.passkeys/operations/delete.d.ts +0 -8
  623. package/components/identity.passkeys/operations/delete.js.map +0 -1
  624. package/components/identity.passkeys/operations/lib/const.d.ts +0 -1
  625. package/components/identity.passkeys/operations/lib/const.js.map +0 -1
  626. package/components/identity.passkeys/operations/list.d.ts +0 -7
  627. package/components/identity.passkeys/operations/list.js.map +0 -1
  628. package/components/identity.passkeys/operations/types/Configuration.d.ts +0 -6
  629. package/components/identity.passkeys/operations/types/Configuration.js.map +0 -1
  630. package/components/identity.passkeys/operations/types/Context.d.ts +0 -15
  631. package/components/identity.passkeys/operations/types/Context.js.map +0 -1
  632. package/components/identity.passkeys/operations/types/Passkey.d.ts +0 -12
  633. package/components/identity.passkeys/operations/types/Passkey.js.map +0 -1
  634. package/components/identity.passkeys/operations/types/index.d.ts +0 -2
  635. package/components/identity.passkeys/operations/types/index.js.map +0 -1
  636. package/components/identity.passkeys/operations/use.d.ts +0 -16
  637. package/components/identity.passkeys/operations/use.js.map +0 -1
  638. package/components/identity.roles/operations/grant.d.ts +0 -10
  639. package/components/identity.roles/operations/grant.js.map +0 -1
  640. package/components/identity.roles/operations/lib/Entity.d.ts +0 -5
  641. package/components/identity.roles/operations/lib/Entity.js.map +0 -1
  642. package/components/identity.roles/operations/list.d.ts +0 -2
  643. package/components/identity.roles/operations/list.js.map +0 -1
  644. package/components/identity.roles/operations/principal.d.ts +0 -13
  645. package/components/identity.roles/operations/principal.js.map +0 -1
  646. package/components/identity.tokens/operations/authenticate.d.ts +0 -9
  647. package/components/identity.tokens/operations/authenticate.js.map +0 -1
  648. package/components/identity.tokens/operations/decrypt.d.ts +0 -15
  649. package/components/identity.tokens/operations/decrypt.js.map +0 -1
  650. package/components/identity.tokens/operations/encrypt.d.ts +0 -8
  651. package/components/identity.tokens/operations/encrypt.js.map +0 -1
  652. package/components/identity.tokens/operations/issue.d.ts +0 -24
  653. package/components/identity.tokens/operations/issue.js.map +0 -1
  654. package/components/identity.tokens/operations/lib/index.d.ts +0 -3
  655. package/components/identity.tokens/operations/lib/index.js.map +0 -1
  656. package/components/identity.tokens/operations/lib/jose.d.ts +0 -1
  657. package/components/identity.tokens/operations/lib/jose.js.map +0 -1
  658. package/components/identity.tokens/operations/lib/key.d.ts +0 -1
  659. package/components/identity.tokens/operations/lib/key.js.map +0 -1
  660. package/components/identity.tokens/operations/lib/pad.d.ts +0 -1
  661. package/components/identity.tokens/operations/lib/pad.js.map +0 -1
  662. package/components/identity.tokens/operations/lib/types.d.ts +0 -88
  663. package/components/identity.tokens/operations/lib/types.js +0 -2
  664. package/components/identity.tokens/operations/lib/types.js.map +0 -1
  665. package/components/identity.tokens/operations/revoke.d.ts +0 -2
  666. package/components/identity.tokens/operations/revoke.js.map +0 -1
  667. package/components/identity.tokens/source/lib/types.ts +0 -102
@@ -0,0 +1,687 @@
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`, whose
5
+ value is what the tool is, and a default denies: a tree holds everything an application
6
+ serves and most of it is machinery a model has no business reading. What a tool takes and
7
+ answers is what the method says of itself, and what a caller may do with it is what `auth`
8
+ says.
9
+
10
+ What a tool is, is stated on the route and nowhere else. The operation states what it is
11
+ too, and that is not this: one operation mounted on two routes is two tools.
12
+
13
+ Two revisions are answered from one endpoint that remembers nothing between requests: the
14
+ modern one, where every request carries its own version and capabilities, and the one
15
+ before it, which opens with `initialize`. Neither is given a session, and neither is given
16
+ a stream.
17
+
18
+ Background:
19
+ Given the annotation:
20
+ """yaml
21
+ mcp:
22
+ name: Teapots
23
+ instructions: A pot is read by its id.
24
+ anonymous: true
25
+ """
26
+ And the `pots` is running with the following manifest:
27
+ """yaml
28
+ exposition:
29
+ /:
30
+ io:output: [id, title, volume]
31
+ GET:
32
+ mcp:tool: All the pots, newest first.
33
+ endpoint: enumerate
34
+ POST:
35
+ mcp:tool: Start a new pot brewing.
36
+ endpoint: create
37
+ /:id:
38
+ GET:
39
+ mcp:tool: One pot, by its id.
40
+ endpoint: observe
41
+ /large:
42
+ GET:
43
+ query:
44
+ criteria: volume>=100
45
+ mcp:tool: The pots that hold a hundred or more, newest first.
46
+ endpoint: enumerate
47
+ /unpublished:
48
+ GET: enumerate
49
+ /guarded:
50
+ isolated: true
51
+ GET:
52
+ auth:role: admin
53
+ mcp:tool: Every pot there is, for whoever may see them all.
54
+ endpoint: enumerate
55
+ """
56
+ And the `pots` database contains:
57
+ | _id | title | volume |
58
+ | 4c4759e6f9c74da989d64511df42d6f4 | First pot | 100 |
59
+
60
+ Scenario: What the server is
61
+ When the following request is received:
62
+ """
63
+ POST /.mcp HTTP/1.1
64
+ host: nex.toa.io
65
+ accept: application/yaml
66
+ content-type: application/json
67
+ mcp-protocol-version: 2026-07-28
68
+ mcp-method: server/discover
69
+
70
+ {"jsonrpc": "2.0", "id": 1, "method": "server/discover",
71
+ "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
72
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
73
+ """
74
+ Then the following reply is sent:
75
+ """
76
+ 200 OK
77
+ cache-control: no-store
78
+
79
+ jsonrpc: '2.0'
80
+ id: 1
81
+ result:
82
+ supportedVersions:
83
+ - '2026-07-28'
84
+ - '2025-11-25'
85
+ capabilities:
86
+ tools: {}
87
+ instructions: A pot is read by its id.
88
+ ttlMs: 1800000
89
+ cacheScope: public
90
+ resultType: complete
91
+ """
92
+
93
+ Scenario: What a client of an earlier revision opens with
94
+ No session is made, and none is named back.
95
+
96
+ When the following request is received:
97
+ """
98
+ POST /.mcp HTTP/1.1
99
+ host: nex.toa.io
100
+ accept: application/yaml
101
+ content-type: application/json
102
+
103
+ {"jsonrpc": "2.0", "id": 1, "method": "initialize",
104
+ "params": {"protocolVersion": "2025-11-25", "capabilities": {},
105
+ "clientInfo": {"name": "Inspector", "version": "2.5.0"}}}
106
+ """
107
+ Then the following reply is sent:
108
+ """
109
+ 200 OK
110
+
111
+ jsonrpc: '2.0'
112
+ id: 1
113
+ result:
114
+ protocolVersion: '2025-11-25'
115
+ capabilities:
116
+ tools: {}
117
+ serverInfo:
118
+ name: Teapots
119
+ instructions: A pot is read by its id.
120
+ """
121
+ And the reply does not contain:
122
+ """
123
+ mcp-session-id
124
+ """
125
+ When the following request is received:
126
+ """
127
+ POST /.mcp HTTP/1.1
128
+ host: nex.toa.io
129
+ content-type: application/json
130
+
131
+ {"jsonrpc": "2.0", "method": "notifications/initialized"}
132
+ """
133
+ Then the following reply is sent:
134
+ """
135
+ 202 Accepted
136
+ """
137
+
138
+ Scenario: What the tools are
139
+ Every method that is published and the caller may reach. One the caller may not, and
140
+ one that is published as nothing at all, are both absent.
141
+
142
+ When the following request is received:
143
+ """
144
+ POST /.mcp HTTP/1.1
145
+ host: nex.toa.io
146
+ accept: application/yaml
147
+ content-type: application/json
148
+ mcp-protocol-version: 2026-07-28
149
+ mcp-method: tools/list
150
+
151
+ {"jsonrpc": "2.0", "id": 2, "method": "tools/list",
152
+ "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
153
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
154
+ """
155
+ Then the following reply is sent:
156
+ """
157
+ 200 OK
158
+
159
+ jsonrpc: '2.0'
160
+ id: 2
161
+ result:
162
+ tools:
163
+ - name: pots/GET
164
+ description: All the pots, newest first.
165
+ inputSchema:
166
+ type: object
167
+ properties:
168
+ query:
169
+ type: object
170
+ properties:
171
+ criteria:
172
+ type: string
173
+ limit:
174
+ type: integer
175
+ minimum: 1
176
+ maximum: 100
177
+ default: 10
178
+ additionalProperties: false
179
+ annotations:
180
+ readOnlyHint: true
181
+ - name: pots/POST
182
+ description: Start a new pot brewing.
183
+ inputSchema:
184
+ type: object
185
+ properties:
186
+ title:
187
+ type: string
188
+ maxLength: 64
189
+ volume:
190
+ type: number
191
+ required:
192
+ - title
193
+ - volume
194
+ additionalProperties: false
195
+ - name: pots/_id/GET
196
+ description: One pot, by its id.
197
+ inputSchema:
198
+ type: object
199
+ properties:
200
+ id:
201
+ type: string
202
+ required:
203
+ - id
204
+ additionalProperties: false
205
+ - name: pots/large/GET
206
+ description: The pots that hold a hundred or more, newest first.
207
+ annotations:
208
+ readOnlyHint: true
209
+ ttlMs: 1800000
210
+ cacheScope: private
211
+ resultType: complete
212
+ """
213
+ And the reply does not contain:
214
+ """
215
+ pots/guarded/GET
216
+ """
217
+ And the reply does not contain:
218
+ """
219
+ pots/unpublished/GET
220
+ """
221
+ And the reply does not contain:
222
+ """
223
+ Put a pot on to brew.
224
+ """
225
+
226
+ Scenario: A method that is published as nothing is not called by guessing its name
227
+ A route the application did not publish is served over HTTP exactly as before. What it
228
+ does not have is a name here, and naming it anyway reaches nothing.
229
+
230
+ When the following request is received:
231
+ """
232
+ POST /.mcp HTTP/1.1
233
+ host: nex.toa.io
234
+ accept: application/yaml
235
+ content-type: application/json
236
+ mcp-protocol-version: 2026-07-28
237
+ mcp-method: tools/call
238
+ mcp-name: pots/unpublished/GET
239
+
240
+ {"jsonrpc": "2.0", "id": 30, "method": "tools/call",
241
+ "params": {"name": "pots/unpublished/GET", "arguments": {},
242
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
243
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
244
+ """
245
+ Then the following reply is sent:
246
+ """
247
+ 404 Not Found
248
+
249
+ jsonrpc: '2.0'
250
+ id: null
251
+ error:
252
+ code: -32601
253
+ """
254
+
255
+ Scenario: A credential does not hide an anonymous tool
256
+ A client here always presents one, and what refuses a credentialed request at an
257
+ `anonymous` route is that the reply would not be cacheable — which a tool's is not.
258
+
259
+ # developer:secret
260
+ Given the `identity.basic` database contains:
261
+ | _id | authority | username | password |
262
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
263
+ And the `identity.bans` database is empty
264
+ When the following request is received:
265
+ """
266
+ POST /.mcp HTTP/1.1
267
+ host: nex.toa.io
268
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
269
+ accept: application/yaml
270
+ content-type: application/json
271
+ mcp-protocol-version: 2026-07-28
272
+ mcp-method: tools/list
273
+
274
+ {"jsonrpc": "2.0", "id": 20, "method": "tools/list",
275
+ "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
276
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
277
+ """
278
+ Then the following reply is sent:
279
+ """
280
+ 200 OK
281
+
282
+ jsonrpc: '2.0'
283
+ id: 20
284
+ result:
285
+ tools:
286
+ - name: pots/GET
287
+ """
288
+
289
+ Scenario: A tool takes what the procedure takes
290
+ When the following request is received:
291
+ """
292
+ POST /.mcp HTTP/1.1
293
+ host: nex.toa.io
294
+ accept: application/yaml
295
+ content-type: application/json
296
+ mcp-protocol-version: 2026-07-28
297
+ mcp-method: tools/call
298
+ mcp-name: pots/_id/GET
299
+
300
+ {"jsonrpc": "2.0", "id": 3, "method": "tools/call",
301
+ "params": {"name": "pots/_id/GET",
302
+ "arguments": {"id": "4c4759e6f9c74da989d64511df42d6f4"},
303
+ "_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
+ jsonrpc: '2.0'
311
+ id: 3
312
+ result:
313
+ structuredContent:
314
+ id: 4c4759e6f9c74da989d64511df42d6f4
315
+ title: First pot
316
+ volume: 100
317
+ resultType: complete
318
+ """
319
+
320
+ Scenario: What is left of the arguments is the input
321
+ When the following request is received:
322
+ """
323
+ POST /.mcp HTTP/1.1
324
+ host: nex.toa.io
325
+ accept: application/yaml
326
+ content-type: application/json
327
+ mcp-protocol-version: 2026-07-28
328
+ mcp-method: tools/call
329
+ mcp-name: pots/POST
330
+
331
+ {"jsonrpc": "2.0", "id": 4, "method": "tools/call",
332
+ "params": {"name": "pots/POST", "arguments": {"title": "Kettle", "volume": 1.7},
333
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
334
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
335
+ """
336
+ Then the following reply is sent:
337
+ """
338
+ 200 OK
339
+
340
+ jsonrpc: '2.0'
341
+ id: 4
342
+ result:
343
+ structuredContent:
344
+ id:
345
+ """
346
+
347
+ Scenario: A name nothing answers to
348
+
349
+ When the following request is received:
350
+ """
351
+ POST /.mcp HTTP/1.1
352
+ host: nex.toa.io
353
+ accept: application/yaml
354
+ content-type: application/json
355
+ mcp-protocol-version: 2026-07-28
356
+ mcp-method: tools/call
357
+ mcp-name: kettles/GET
358
+
359
+ {"jsonrpc": "2.0", "id": 5, "method": "tools/call",
360
+ "params": {"name": "kettles/GET", "arguments": {},
361
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
362
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
363
+ """
364
+ Then the following reply is sent:
365
+ """
366
+ 404 Not Found
367
+ """
368
+
369
+ Scenario: A method this server does not answer
370
+ The status is what tells a client that this endpoint is here and the method is not.
371
+
372
+ When the following request is received:
373
+ """
374
+ POST /.mcp HTTP/1.1
375
+ host: nex.toa.io
376
+ accept: application/yaml
377
+ content-type: application/json
378
+ mcp-protocol-version: 2026-07-28
379
+ mcp-method: prompts/list
380
+
381
+ {"jsonrpc": "2.0", "id": 6, "method": "prompts/list",
382
+ "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
383
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
384
+ """
385
+ Then the following reply is sent:
386
+ """
387
+ 404 Not Found
388
+
389
+ jsonrpc: '2.0'
390
+ id: 6
391
+ error:
392
+ code: -32601
393
+ """
394
+
395
+ Scenario: A header saying one thing and a body another
396
+ What routes a request and what answers it must not be told two different things.
397
+
398
+ When the following request is received:
399
+ """
400
+ POST /.mcp HTTP/1.1
401
+ host: nex.toa.io
402
+ accept: application/yaml
403
+ content-type: application/json
404
+ mcp-protocol-version: 2026-07-28
405
+ mcp-method: tools/call
406
+ mcp-name: pots/GET
407
+
408
+ {"jsonrpc": "2.0", "id": 7, "method": "tools/call",
409
+ "params": {"name": "pots/POST", "arguments": {},
410
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
411
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
412
+ """
413
+ Then the following reply is sent:
414
+ """
415
+ 400 Bad Request
416
+
417
+ jsonrpc: '2.0'
418
+ id: 7
419
+ error:
420
+ code: -32020
421
+ """
422
+
423
+ Scenario: A revision neither served
424
+ When the following request is received:
425
+ """
426
+ POST /.mcp HTTP/1.1
427
+ host: nex.toa.io
428
+ accept: application/yaml
429
+ content-type: application/json
430
+ mcp-protocol-version: 1900-01-01
431
+ mcp-method: tools/list
432
+
433
+ {"jsonrpc": "2.0", "id": 8, "method": "tools/list", "params": {}}
434
+ """
435
+ Then the following reply is sent:
436
+ """
437
+ 400 Bad Request
438
+
439
+ jsonrpc: '2.0'
440
+ id: 8
441
+ error:
442
+ code: -32022
443
+ data:
444
+ supported:
445
+ - '2026-07-28'
446
+ - '2025-11-25'
447
+ requested: '1900-01-01'
448
+ """
449
+
450
+ Scenario: What the endpoint does not serve
451
+ A stream is what these were for, and this endpoint has none.
452
+
453
+ When the following request is received:
454
+ """
455
+ GET /.mcp HTTP/1.1
456
+ host: nex.toa.io
457
+ """
458
+ Then the following reply is sent:
459
+ """
460
+ 405 Method Not Allowed
461
+ allow: POST
462
+ """
463
+
464
+ Scenario: Without the annotation nothing answers there
465
+ Given the annotation:
466
+ """yaml
467
+ {}
468
+ """
469
+ When the following request is received:
470
+ """
471
+ POST /.mcp HTTP/1.1
472
+ host: nex.toa.io
473
+ content-type: application/json
474
+
475
+ {"jsonrpc": "2.0", "id": 9, "method": "tools/list", "params": {}}
476
+ """
477
+ Then the following reply is sent:
478
+ """
479
+ 404 Not Found
480
+ """
481
+
482
+ Scenario: A tool the caller may not call
483
+ What `auth` makes of a call is a refusal of the call, not of the credential: the model
484
+ named a record that is not the caller's, which it may correct itself by naming another.
485
+ A challenge here would send the client to ask for a scope that would not help.
486
+
487
+ # developer:secret, who is not an `admin` and so may not reach `pots/guarded/GET`
488
+ Given the `identity.basic` database contains:
489
+ | _id | authority | username | password |
490
+ | efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
491
+ And the `identity.bans` database is empty
492
+ When the following request is received:
493
+ """
494
+ POST /.mcp HTTP/1.1
495
+ host: nex.toa.io
496
+ authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
497
+ accept: application/yaml
498
+ content-type: application/json
499
+ mcp-protocol-version: 2026-07-28
500
+ mcp-method: tools/call
501
+ mcp-name: pots/guarded/GET
502
+
503
+ {"jsonrpc": "2.0", "id": 31, "method": "tools/call",
504
+ "params": {"name": "pots/guarded/GET", "arguments": {},
505
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
506
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
507
+ """
508
+ Then the following reply is sent:
509
+ """
510
+ 200 OK
511
+
512
+ jsonrpc: '2.0'
513
+ id: 31
514
+ result:
515
+ isError: true
516
+ """
517
+ And the reply does not contain:
518
+ """
519
+ insufficient_scope
520
+ """
521
+
522
+ Scenario: An argument the schemas would not take
523
+ What the arguments are refused for is the model's to correct by sending others, so it
524
+ is a result and not an error of the protocol.
525
+
526
+ When the following request is received:
527
+ """
528
+ POST /.mcp HTTP/1.1
529
+ host: nex.toa.io
530
+ accept: application/yaml
531
+ content-type: application/json
532
+ mcp-protocol-version: 2026-07-28
533
+ mcp-method: tools/call
534
+ mcp-name: pots/_id/GET
535
+
536
+ {"jsonrpc": "2.0", "id": 32, "method": "tools/call",
537
+ "params": {"name": "pots/_id/GET",
538
+ "arguments": {"id": "not-an-id"},
539
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
540
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
541
+ """
542
+ Then the following reply is sent:
543
+ """
544
+ 200 OK
545
+
546
+ jsonrpc: '2.0'
547
+ id: 32
548
+ result:
549
+ isError: true
550
+ """
551
+
552
+ Scenario: What the operation refused with
553
+ A refusal is a value a model reads and may correct itself by, so it is a result rather
554
+ than an error of the protocol.
555
+
556
+ Given the `echo` is running with the following manifest:
557
+ """yaml
558
+ exposition:
559
+ /:
560
+ io:output: true
561
+ GET:
562
+ mcp:tool: Refuses, with what it was given.
563
+ endpoint: error
564
+ """
565
+ When the following request is received:
566
+ """
567
+ POST /.mcp HTTP/1.1
568
+ host: nex.toa.io
569
+ accept: application/yaml
570
+ content-type: application/json
571
+ mcp-protocol-version: 2026-07-28
572
+ mcp-method: tools/call
573
+ mcp-name: echo/GET
574
+
575
+ {"jsonrpc": "2.0", "id": 10, "method": "tools/call",
576
+ "params": {"name": "echo/GET", "arguments": {},
577
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
578
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
579
+ """
580
+ Then the following reply is sent:
581
+ """
582
+ 200 OK
583
+
584
+ jsonrpc: '2.0'
585
+ id: 10
586
+ result:
587
+ content:
588
+ - type: text
589
+ text: message
590
+ isError: true
591
+ resultType: complete
592
+ """
593
+
594
+ Scenario: An operation that declares no output
595
+ A schema the revision would have the reply validated against is worse said emptily than
596
+ left unsaid — and the reply is answered all the same.
597
+
598
+ Given the `echo` is running with the following manifest:
599
+ """yaml
600
+ exposition:
601
+ /:
602
+ io:output: true
603
+ GET:
604
+ mcp:tool: Answers with what it was given.
605
+ endpoint: echo
606
+ """
607
+ When the following request is received:
608
+ """
609
+ POST /.mcp HTTP/1.1
610
+ host: nex.toa.io
611
+ accept: application/yaml
612
+ content-type: application/json
613
+ mcp-protocol-version: 2026-07-28
614
+ mcp-method: tools/call
615
+ mcp-name: echo/GET
616
+
617
+ {"jsonrpc": "2.0", "id": 11, "method": "tools/call",
618
+ "params": {"name": "echo/GET", "arguments": {"greeting": "hello"},
619
+ "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
620
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
621
+ """
622
+ Then the following reply is sent:
623
+ """
624
+ 200 OK
625
+
626
+ jsonrpc: '2.0'
627
+ id: 11
628
+ result:
629
+ structuredContent:
630
+ greeting: hello
631
+ resultType: complete
632
+ """
633
+
634
+ Scenario: An origin that is not listed
635
+ The revision requires this against DNS rebinding, and an empty list admits none.
636
+
637
+ When the following request is received:
638
+ """
639
+ POST /.mcp HTTP/1.1
640
+ host: nex.toa.io
641
+ origin: https://elsewhere.example
642
+ accept: application/yaml
643
+ content-type: application/json
644
+ mcp-protocol-version: 2026-07-28
645
+ mcp-method: tools/list
646
+
647
+ {"jsonrpc": "2.0", "id": 12, "method": "tools/list",
648
+ "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
649
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
650
+ """
651
+ Then the following reply is sent:
652
+ """
653
+ 403 Forbidden
654
+ """
655
+
656
+ Scenario: Without a credential
657
+ A request without one is where the authorization flow starts, so the refusal carries
658
+ the document that says where to get a token.
659
+
660
+ Given the annotation:
661
+ """yaml
662
+ authorities:
663
+ nex: nex.toa.io
664
+ oauth:
665
+ authorize: https://app.nex.toa.io/oauth/authorize
666
+ resources: ['/.mcp']
667
+ mcp:
668
+ name: Teapots
669
+ """
670
+ When the following request is received:
671
+ """
672
+ POST /.mcp HTTP/1.1
673
+ host: nex.toa.io
674
+ accept: application/yaml
675
+ content-type: application/json
676
+ mcp-protocol-version: 2026-07-28
677
+ mcp-method: tools/list
678
+
679
+ {"jsonrpc": "2.0", "id": 13, "method": "tools/list",
680
+ "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
681
+ "io.modelcontextprotocol/clientCapabilities": {}}}}
682
+ """
683
+ Then the following reply is sent:
684
+ """
685
+ 401 Unauthorized
686
+ www-authenticate: Bearer resource_metadata="https://nex.toa.io/.well-known/oauth-protected-resource/.mcp"
687
+ """