@toa.io/extensions.exposition 1.0.0-alpha.291 → 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 (526) 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 +25 -13
  6. package/transpiled/Discovery/Explorer.js +1 -1
  7. package/transpiled/Discovery/Explorer.js.map +1 -1
  8. package/transpiled/Discovery/Site.js +1 -1
  9. package/transpiled/Discovery/Site.js.map +1 -1
  10. package/transpiled/Discovery/trunk.js +1 -1
  11. package/transpiled/Discovery/trunk.js.map +1 -1
  12. package/transpiled/Endpoint.js +3 -0
  13. package/transpiled/Endpoint.js.map +1 -1
  14. package/transpiled/Factory.js +1 -1
  15. package/transpiled/Factory.js.map +1 -1
  16. package/transpiled/Gateway.js +1 -1
  17. package/transpiled/Gateway.js.map +1 -1
  18. package/transpiled/HTTP/Server.d.ts +1 -1
  19. package/transpiled/HTTP/Server.js +1 -1
  20. package/transpiled/HTTP/Server.js.map +1 -1
  21. package/transpiled/Introspection.d.ts +6 -0
  22. package/transpiled/Introspection.js +1 -0
  23. package/transpiled/Introspection.js.map +1 -1
  24. package/transpiled/MCP/Server.d.ts +1 -1
  25. package/transpiled/MCP/Server.js +1 -1
  26. package/transpiled/MCP/Server.js.map +1 -1
  27. package/transpiled/MCP/discover.d.ts +1 -1
  28. package/transpiled/MCP/schema.js +2 -2
  29. package/transpiled/Query.d.ts +2 -12
  30. package/transpiled/Query.js +3 -13
  31. package/transpiled/Query.js.map +1 -1
  32. package/transpiled/RPC/Dispatcher.d.ts +1 -1
  33. package/transpiled/RPC/Dispatcher.js +2 -2
  34. package/transpiled/RPC/Dispatcher.js.map +1 -1
  35. package/transpiled/RTD/Endpoint.d.ts +2 -3
  36. package/transpiled/RTD/Tree.js +1 -1
  37. package/transpiled/RTD/Tree.js.map +1 -1
  38. package/transpiled/RTD/factory.js +1 -1
  39. package/transpiled/RTD/factory.js.map +1 -1
  40. package/transpiled/RTD/syntax/index.d.ts +1 -2
  41. package/transpiled/RTD/syntax/index.js +1 -2
  42. package/transpiled/RTD/syntax/index.js.map +1 -1
  43. package/transpiled/Tenant.js +1 -1
  44. package/transpiled/Tenant.js.map +1 -1
  45. package/transpiled/directives/auth/Authorization.js +1 -1
  46. package/transpiled/directives/auth/Authorization.js.map +1 -1
  47. package/transpiled/directives/io/IO.js +1 -1
  48. package/transpiled/directives/io/IO.js.map +1 -1
  49. package/transpiled/directives/oauth/documents.d.ts +1 -1
  50. package/transpiled/index.d.ts +0 -2
  51. package/transpiled/index.js +0 -2
  52. package/transpiled/index.js.map +1 -1
  53. package/transpiled/service.js +1 -1
  54. package/transpiled/service.js.map +1 -1
  55. package/ui/dist/_app/immutable/assets/0.Cu0AnR_8.css +2 -0
  56. package/ui/dist/_app/immutable/assets/2.BghF56l_.css +1 -0
  57. package/ui/dist/_app/immutable/assets/ui.C8aD6zzF.css +1 -0
  58. package/ui/dist/_app/immutable/chunks/B8GvXrmq.js +1 -0
  59. package/ui/dist/_app/immutable/chunks/BVDJTrf4.js +3 -0
  60. package/ui/dist/_app/immutable/chunks/D6q28_Ok.js +86 -0
  61. package/ui/dist/_app/immutable/chunks/{D9tE1yyO.js → DVlaUfVU.js} +1 -1
  62. package/ui/dist/_app/immutable/chunks/DpB73ZB6.js +6 -0
  63. package/ui/dist/_app/immutable/entry/app.CTava8yn.js +2 -0
  64. package/ui/dist/_app/immutable/entry/start.yWN0gSLA.js +1 -0
  65. package/ui/dist/_app/immutable/nodes/0.HKRDBYrC.js +1 -0
  66. package/ui/dist/_app/immutable/nodes/1.CLa0ydOi.js +1 -0
  67. package/ui/dist/_app/immutable/nodes/2.C9Kaym8C.js +8 -0
  68. package/ui/dist/_app/immutable/nodes/3.C1X4_rXZ.js +1 -0
  69. package/ui/dist/_app/immutable/nodes/4.DdzDIi9E.js +1 -0
  70. package/ui/dist/_app/immutable/nodes/5.DpbmCMdw.js +1 -0
  71. package/ui/dist/_app/version.json +1 -1
  72. package/ui/dist/index.html +12 -12
  73. package/CHANGELOG.md +0 -35
  74. package/components/identity.bans/tsconfig.tsbuildinfo +0 -1
  75. package/components/identity.basic/source/lib/credentials.test.ts +0 -18
  76. package/components/identity.basic/tsconfig.tsbuildinfo +0 -1
  77. package/components/identity.clients/source/lib/canonical.test.ts +0 -43
  78. package/components/identity.clients/source/lib/cimd.test.ts +0 -122
  79. package/components/identity.clients/source/lib/redirect.test.ts +0 -47
  80. package/components/identity.clients/tsconfig.tsbuildinfo +0 -1
  81. package/components/identity.credentials/source/list.test.ts +0 -70
  82. package/components/identity.credentials/tsconfig.tsbuildinfo +0 -1
  83. package/components/identity.federation/source/lib/discovery.test.ts +0 -60
  84. package/components/identity.federation/source/list.test.ts +0 -41
  85. package/components/identity.federation/tsconfig.tsbuildinfo +0 -1
  86. package/components/identity.grants/tsconfig.tsbuildinfo +0 -1
  87. package/components/identity.keys/tsconfig.tsbuildinfo +0 -1
  88. package/components/identity.otp/tsconfig.tsbuildinfo +0 -1
  89. package/components/identity.passkeys/source/errors.test.ts +0 -34
  90. package/components/identity.passkeys/source/webauthn.test.ts +0 -26
  91. package/components/identity.passkeys/tsconfig.tsbuildinfo +0 -1
  92. package/components/identity.roles/tsconfig.tsbuildinfo +0 -1
  93. package/components/identity.tokens/source/authenticate.test.ts +0 -112
  94. package/components/identity.tokens/source/decrypt.test.ts +0 -216
  95. package/components/identity.tokens/source/encrypt.test.ts +0 -150
  96. package/components/identity.tokens/source/issue.test.ts +0 -73
  97. package/components/identity.tokens/source/lib/form.test.ts +0 -25
  98. package/components/identity.tokens/source/lib/paseto.test.ts +0 -62
  99. package/components/identity.tokens/tsconfig.tsbuildinfo +0 -1
  100. package/context.toa.yaml +0 -31
  101. package/cucumber.mjs +0 -7
  102. package/documentation/.assets/ia3-dark.jpg +0 -0
  103. package/documentation/.assets/ia3-light.jpg +0 -0
  104. package/documentation/.assets/overview-dark.jpg +0 -0
  105. package/documentation/.assets/overview-light.jpg +0 -0
  106. package/documentation/.assets/role-scopes-dark.jpg +0 -0
  107. package/documentation/.assets/role-scopes-light.jpg +0 -0
  108. package/documentation/.assets/rtd-dark.jpg +0 -0
  109. package/documentation/.assets/rtd-light.jpg +0 -0
  110. package/documentation/access.md +0 -350
  111. package/documentation/authorities.md +0 -51
  112. package/documentation/cache.md +0 -72
  113. package/documentation/components.md +0 -472
  114. package/documentation/consent.md +0 -101
  115. package/documentation/credentials.md +0 -88
  116. package/documentation/dev.md +0 -30
  117. package/documentation/discovery.md +0 -81
  118. package/documentation/flow.md +0 -44
  119. package/documentation/help.md +0 -122
  120. package/documentation/identity.md +0 -304
  121. package/documentation/introspection.md +0 -123
  122. package/documentation/io.md +0 -167
  123. package/documentation/ip.md +0 -24
  124. package/documentation/map.md +0 -123
  125. package/documentation/mcp.md +0 -183
  126. package/documentation/notes/desync.jpg +0 -0
  127. package/documentation/notes/peers.md +0 -59
  128. package/documentation/notes/sse.md +0 -71
  129. package/documentation/notes/throttling.md +0 -122
  130. package/documentation/oauth.md +0 -180
  131. package/documentation/octets.md +0 -334
  132. package/documentation/passkeys.md +0 -11
  133. package/documentation/protocol.md +0 -120
  134. package/documentation/query.md +0 -324
  135. package/documentation/require.md +0 -15
  136. package/documentation/rpc.md +0 -154
  137. package/documentation/tracing.md +0 -70
  138. package/documentation/tree.md +0 -199
  139. package/features/access.feature +0 -596
  140. package/features/annotation.feature +0 -32
  141. package/features/auth.assert.feature +0 -55
  142. package/features/auth.bearer.feature +0 -120
  143. package/features/auth.claims.feature +0 -171
  144. package/features/auth.incept.feature +0 -166
  145. package/features/auth.input.feature +0 -59
  146. package/features/authorities.basic.feature +0 -141
  147. package/features/authorities.feature +0 -71
  148. package/features/authorities.federation.feature +0 -100
  149. package/features/authorities.tokens.feature +0 -117
  150. package/features/body.feature +0 -76
  151. package/features/cache.feature +0 -368
  152. package/features/configuration.feature +0 -206
  153. package/features/cors.feature +0 -127
  154. package/features/credentials.feature +0 -106
  155. package/features/debug.feature +0 -34
  156. package/features/dev.feature +0 -90
  157. package/features/directives.feature +0 -61
  158. package/features/discovery.feature +0 -213
  159. package/features/discovery.ui.feature +0 -213
  160. package/features/dynamic.feature +0 -192
  161. package/features/errors.feature +0 -258
  162. package/features/etag.feature +0 -239
  163. package/features/flow.feature +0 -148
  164. package/features/help.feature +0 -512
  165. package/features/identity.bans.feature +0 -200
  166. package/features/identity.basic.feature +0 -666
  167. package/features/identity.feature +0 -240
  168. package/features/identity.federation.feature +0 -396
  169. package/features/identity.otp.feature +0 -142
  170. package/features/identity.roles.feature +0 -568
  171. package/features/identity.tokens.custom.feature +0 -430
  172. package/features/identity.tokens.feature +0 -131
  173. package/features/interruptions.feature +0 -20
  174. package/features/introspection.feature +0 -565
  175. package/features/introspection.map.feature +0 -108
  176. package/features/io.feature +0 -204
  177. package/features/io.throttle.feature +0 -166
  178. package/features/map.feature +0 -360
  179. package/features/mcp.feature +0 -753
  180. package/features/methods.feature +0 -48
  181. package/features/oauth.clients.feature +0 -195
  182. package/features/oauth.discovery.feature +0 -164
  183. package/features/oauth.grants.feature +0 -301
  184. package/features/octets.cloudinary.feature +0 -233
  185. package/features/octets.download.feature +0 -194
  186. package/features/octets.entries.feature +0 -83
  187. package/features/octets.feature +0 -306
  188. package/features/octets.head.feature +0 -40
  189. package/features/octets.location.feature +0 -83
  190. package/features/octets.meta.feature +0 -117
  191. package/features/octets.workflows.feature +0 -565
  192. package/features/passkeys.feature +0 -66
  193. package/features/probes.feature +0 -18
  194. package/features/query.feature +0 -389
  195. package/features/realtime.feature +0 -34
  196. package/features/require.feature +0 -66
  197. package/features/response.feature +0 -103
  198. package/features/routes.feature +0 -224
  199. package/features/rpc.feature +0 -429
  200. package/features/server.feature +0 -21
  201. package/features/site/_app/immutable/asset.js +0 -1
  202. package/features/site/favicon.ico +0 -0
  203. package/features/site/index.html +0 -10
  204. package/features/steps/.env.example +0 -5
  205. package/features/steps/Captures.ts +0 -20
  206. package/features/steps/Cloudinary.ts +0 -12
  207. package/features/steps/Common.ts +0 -38
  208. package/features/steps/Components.ts +0 -115
  209. package/features/steps/Database.ts +0 -106
  210. package/features/steps/Gateway.ts +0 -240
  211. package/features/steps/HTTP.ts +0 -96
  212. package/features/steps/IDP.ts +0 -361
  213. package/features/steps/Identity.ts +0 -54
  214. package/features/steps/OTP.ts +0 -42
  215. package/features/steps/Parameters.ts +0 -162
  216. package/features/steps/Probe.ts +0 -38
  217. package/features/steps/Realtime.ts +0 -175
  218. package/features/steps/Workspace.ts +0 -48
  219. package/features/steps/components/audit/manifest.toa.yaml +0 -20
  220. package/features/steps/components/audit/operations/record.js +0 -5
  221. package/features/steps/components/echo/manifest.toa.yaml +0 -59
  222. package/features/steps/components/echo/operations/affect.js +0 -3
  223. package/features/steps/components/echo/operations/compute.js +0 -3
  224. package/features/steps/components/echo/operations/echo.js +0 -3
  225. package/features/steps/components/echo/operations/error.js +0 -7
  226. package/features/steps/components/echo/operations/identity.js +0 -3
  227. package/features/steps/components/echo/operations/parameters.js +0 -3
  228. package/features/steps/components/echo/operations/ping.js +0 -3
  229. package/features/steps/components/echo/operations/unwrap.js +0 -3
  230. package/features/steps/components/echo.beacon/manifest.toa.yaml +0 -2
  231. package/features/steps/components/echo.beacon/operations/hello.js +0 -3
  232. package/features/steps/components/greeter/manifest.toa.yaml +0 -5
  233. package/features/steps/components/greeter/operations/greet.js +0 -3
  234. package/features/steps/components/notify/manifest.toa.yaml +0 -20
  235. package/features/steps/components/notify/operations/send.js +0 -5
  236. package/features/steps/components/octets.tester/manifest.toa.yaml +0 -73
  237. package/features/steps/components/octets.tester/operations/authority.js +0 -3
  238. package/features/steps/components/octets.tester/operations/bar.js +0 -9
  239. package/features/steps/components/octets.tester/operations/baz.js +0 -9
  240. package/features/steps/components/octets.tester/operations/concat.js +0 -5
  241. package/features/steps/components/octets.tester/operations/echo.js +0 -5
  242. package/features/steps/components/octets.tester/operations/err.js +0 -14
  243. package/features/steps/components/octets.tester/operations/foo.js +0 -5
  244. package/features/steps/components/octets.tester/operations/id.js +0 -5
  245. package/features/steps/components/octets.tester/operations/identity.js +0 -5
  246. package/features/steps/components/octets.tester/operations/lenna.png +0 -0
  247. package/features/steps/components/octets.tester/operations/redirect.js +0 -17
  248. package/features/steps/components/octets.tester/operations/yex.js +0 -14
  249. package/features/steps/components/octets.tester/operations/yield.js +0 -11
  250. package/features/steps/components/orders/manifest.toa.yaml +0 -30
  251. package/features/steps/components/orders/operations/create.js +0 -7
  252. package/features/steps/components/pots/manifest.toa.yaml +0 -91
  253. package/features/steps/components/pots/migrations/0002-indexes.yaml +0 -4
  254. package/features/steps/components/pricing/manifest.toa.yaml +0 -13
  255. package/features/steps/components/pricing/operations/quote.js +0 -3
  256. package/features/steps/components/sequences/manifest.toa.yaml +0 -11
  257. package/features/steps/components/sequences/operations/numbers.js +0 -5
  258. package/features/steps/components/sequences/operations/tokens.js +0 -14
  259. package/features/steps/components/users/manifest.toa.yaml +0 -30
  260. package/features/steps/components/users/operations/create.js +0 -11
  261. package/features/steps/components/users.properties/manifest.toa.yaml +0 -22
  262. package/features/steps/map.ts +0 -30
  263. package/features/steps/tsconfig.json +0 -9
  264. package/features/streams.feature +0 -35
  265. package/features/timestamps.feature +0 -41
  266. package/features/timing.feature +0 -49
  267. package/features/tracing.feature +0 -123
  268. package/schemas/annotation.cos.yaml +0 -125
  269. package/schemas/call.cos.yaml +0 -18
  270. package/schemas/directive.cos.yaml +0 -7
  271. package/schemas/method.cos.yaml +0 -23
  272. package/schemas/node.cos.yaml +0 -22
  273. package/schemas/query.cos.yaml +0 -31
  274. package/schemas/querystring.cos.yaml +0 -19
  275. package/schemas/range.cos.yaml +0 -10
  276. package/schemas/route.cos.yaml +0 -6
  277. package/source/Annotation.ts +0 -89
  278. package/source/Branch.test.ts +0 -40
  279. package/source/Branch.ts +0 -44
  280. package/source/Composition.ts +0 -51
  281. package/source/Context.ts +0 -11
  282. package/source/Directive.test.ts +0 -199
  283. package/source/Directive.ts +0 -248
  284. package/source/Discovery/Explorer.ts +0 -34
  285. package/source/Discovery/Site.test.ts +0 -147
  286. package/source/Discovery/Site.ts +0 -202
  287. package/source/Discovery/index.ts +0 -3
  288. package/source/Discovery/tree.test.ts +0 -175
  289. package/source/Discovery/tree.ts +0 -77
  290. package/source/Discovery/trunk.ts +0 -33
  291. package/source/Endpoint.test.ts +0 -67
  292. package/source/Endpoint.ts +0 -157
  293. package/source/Factory.ts +0 -42
  294. package/source/Gateway.ts +0 -390
  295. package/source/HTTP/Context.ts +0 -143
  296. package/source/HTTP/Probe.ts +0 -99
  297. package/source/HTTP/Server.ts +0 -430
  298. package/source/HTTP/Timing.ts +0 -14
  299. package/source/HTTP/address.test.ts +0 -28
  300. package/source/HTTP/address.ts +0 -16
  301. package/source/HTTP/exceptions.ts +0 -99
  302. package/source/HTTP/formats/form.ts +0 -21
  303. package/source/HTTP/formats/index.ts +0 -36
  304. package/source/HTTP/formats/json.ts +0 -14
  305. package/source/HTTP/formats/msgpack.ts +0 -14
  306. package/source/HTTP/formats/text.ts +0 -10
  307. package/source/HTTP/formats/yaml.test.ts +0 -22
  308. package/source/HTTP/formats/yaml.ts +0 -40
  309. package/source/HTTP/index.ts +0 -6
  310. package/source/HTTP/messages.test.ts +0 -196
  311. package/source/HTTP/messages.ts +0 -186
  312. package/source/HTTP/types.ts +0 -39
  313. package/source/Interception.ts +0 -37
  314. package/source/Introspection.ts +0 -179
  315. package/source/MCP/Server.ts +0 -335
  316. package/source/MCP/discover.ts +0 -51
  317. package/source/MCP/errors.ts +0 -80
  318. package/source/MCP/index.ts +0 -1
  319. package/source/MCP/schema.test.ts +0 -91
  320. package/source/MCP/schema.ts +0 -94
  321. package/source/MCP/tools.ts +0 -144
  322. package/source/MCP/types.ts +0 -84
  323. package/source/Mapping.ts +0 -101
  324. package/source/Query.test.ts +0 -54
  325. package/source/Query.ts +0 -277
  326. package/source/RPC/Context.ts +0 -75
  327. package/source/RPC/Dispatcher.ts +0 -150
  328. package/source/RPC/errors.test.ts +0 -77
  329. package/source/RPC/errors.ts +0 -82
  330. package/source/RPC/index.ts +0 -1
  331. package/source/RPC/names.test.ts +0 -141
  332. package/source/RPC/names.ts +0 -176
  333. package/source/RPC/types.ts +0 -34
  334. package/source/RTD/Context.ts +0 -16
  335. package/source/RTD/Directives.ts +0 -126
  336. package/source/RTD/Endpoint.ts +0 -27
  337. package/source/RTD/Match.ts +0 -11
  338. package/source/RTD/Method.ts +0 -39
  339. package/source/RTD/Node.ts +0 -169
  340. package/source/RTD/Route.ts +0 -93
  341. package/source/RTD/Tree.ts +0 -137
  342. package/source/RTD/expiration.test.ts +0 -81
  343. package/source/RTD/factory.ts +0 -105
  344. package/source/RTD/index.ts +0 -8
  345. package/source/RTD/segment.test.ts +0 -35
  346. package/source/RTD/segment.ts +0 -51
  347. package/source/RTD/syntax/index.ts +0 -2
  348. package/source/RTD/syntax/parse.test.ts +0 -196
  349. package/source/RTD/syntax/parse.ts +0 -171
  350. package/source/RTD/syntax/types.ts +0 -69
  351. package/source/RTD/walk.test.ts +0 -147
  352. package/source/Remotes.test.ts +0 -79
  353. package/source/Remotes.ts +0 -39
  354. package/source/Tenant.ts +0 -73
  355. package/source/const.ts +0 -45
  356. package/source/deployment.ts +0 -96
  357. package/source/directives/auth/Anonymous.test.ts +0 -70
  358. package/source/directives/auth/Anonymous.ts +0 -36
  359. package/source/directives/auth/Anyone.ts +0 -23
  360. package/source/directives/auth/Assert.ts +0 -43
  361. package/source/directives/auth/Authorization.test.ts +0 -24
  362. package/source/directives/auth/Authorization.ts +0 -388
  363. package/source/directives/auth/Delegate.test.ts +0 -36
  364. package/source/directives/auth/Delegate.ts +0 -54
  365. package/source/directives/auth/Echo.ts +0 -24
  366. package/source/directives/auth/Federation.ts +0 -104
  367. package/source/directives/auth/Id.ts +0 -37
  368. package/source/directives/auth/Incept.ts +0 -117
  369. package/source/directives/auth/Input.ts +0 -92
  370. package/source/directives/auth/Role.test.ts +0 -147
  371. package/source/directives/auth/Role.ts +0 -99
  372. package/source/directives/auth/Rule.ts +0 -59
  373. package/source/directives/auth/Scheme.ts +0 -31
  374. package/source/directives/auth/create.ts +0 -11
  375. package/source/directives/auth/index.ts +0 -3
  376. package/source/directives/auth/schemes.test.ts +0 -18
  377. package/source/directives/auth/schemes.ts +0 -39
  378. package/source/directives/auth/split.ts +0 -14
  379. package/source/directives/auth/types.ts +0 -75
  380. package/source/directives/cache/Cache.ts +0 -92
  381. package/source/directives/cache/Control.ts +0 -81
  382. package/source/directives/cache/Exact.ts +0 -7
  383. package/source/directives/cache/etag.ts +0 -38
  384. package/source/directives/cache/index.ts +0 -3
  385. package/source/directives/cache/types.ts +0 -9
  386. package/source/directives/cors/CORS.test.ts +0 -75
  387. package/source/directives/cors/CORS.ts +0 -88
  388. package/source/directives/cors/index.ts +0 -3
  389. package/source/directives/dev/Development.ts +0 -41
  390. package/source/directives/dev/Faulty.ts +0 -31
  391. package/source/directives/dev/Sleep.ts +0 -53
  392. package/source/directives/dev/Stub.ts +0 -14
  393. package/source/directives/dev/Throw.ts +0 -14
  394. package/source/directives/dev/index.ts +0 -3
  395. package/source/directives/dev/types.ts +0 -5
  396. package/source/directives/flow/Compose.ts +0 -98
  397. package/source/directives/flow/Fetch.ts +0 -86
  398. package/source/directives/flow/Flow.ts +0 -43
  399. package/source/directives/flow/index.ts +0 -3
  400. package/source/directives/flow/types.ts +0 -7
  401. package/source/directives/help/Family.ts +0 -122
  402. package/source/directives/help/Help.test.ts +0 -227
  403. package/source/directives/help/Help.ts +0 -47
  404. package/source/directives/help/Parameters.ts +0 -47
  405. package/source/directives/help/described.ts +0 -57
  406. package/source/directives/help/index.ts +0 -45
  407. package/source/directives/index.ts +0 -33
  408. package/source/directives/io/Directive.ts +0 -17
  409. package/source/directives/io/IO.ts +0 -118
  410. package/source/directives/io/Input.ts +0 -55
  411. package/source/directives/io/Message.ts +0 -1
  412. package/source/directives/io/Output.ts +0 -81
  413. package/source/directives/io/Status.test.ts +0 -88
  414. package/source/directives/io/Status.ts +0 -47
  415. package/source/directives/io/Throttle.ts +0 -30
  416. package/source/directives/io/index.ts +0 -3
  417. package/source/directives/io/lib/throttle/Configuration.test.ts +0 -72
  418. package/source/directives/io/lib/throttle/Configuration.ts +0 -68
  419. package/source/directives/io/lib/throttle/Keys.ts +0 -53
  420. package/source/directives/io/lib/throttle/Quotas.test.ts +0 -411
  421. package/source/directives/io/lib/throttle/Quotas.ts +0 -190
  422. package/source/directives/io/lib/throttle/Sync.test.ts +0 -163
  423. package/source/directives/io/lib/throttle/Sync.ts +0 -93
  424. package/source/directives/io/lib/throttle/Warning.test.ts +0 -32
  425. package/source/directives/io/lib/throttle/Warning.ts +0 -29
  426. package/source/directives/io/lib/throttle/components/Component.ts +0 -7
  427. package/source/directives/io/lib/throttle/components/IP.ts +0 -30
  428. package/source/directives/io/lib/throttle/components/Identity.ts +0 -19
  429. package/source/directives/io/lib/throttle/components/Path.ts +0 -8
  430. package/source/directives/io/lib/throttle/components/Route.ts +0 -19
  431. package/source/directives/io/lib/throttle/components/Segment.ts +0 -19
  432. package/source/directives/io/lib/throttle/components/index.ts +0 -19
  433. package/source/directives/io/lib/throttle/conditions/Condition.ts +0 -5
  434. package/source/directives/io/lib/throttle/conditions/Status.ts +0 -17
  435. package/source/directives/io/lib/throttle/conditions/index.ts +0 -11
  436. package/source/directives/io/lib/throttle/index.ts +0 -4
  437. package/source/directives/io/schemas.test.ts +0 -40
  438. package/source/directives/io/schemas.ts +0 -16
  439. package/source/directives/map/Authority.ts +0 -15
  440. package/source/directives/map/Buffer.ts +0 -15
  441. package/source/directives/map/Claims.ts +0 -63
  442. package/source/directives/map/Directive.ts +0 -4
  443. package/source/directives/map/Headers.ts +0 -60
  444. package/source/directives/map/Language.ts +0 -45
  445. package/source/directives/map/Languages.ts +0 -17
  446. package/source/directives/map/Map.ts +0 -85
  447. package/source/directives/map/Mapping.ts +0 -45
  448. package/source/directives/map/Properties.ts +0 -15
  449. package/source/directives/map/Segments.ts +0 -52
  450. package/source/directives/map/index.ts +0 -3
  451. package/source/directives/mcp/MCP.ts +0 -33
  452. package/source/directives/mcp/Tool.test.ts +0 -56
  453. package/source/directives/mcp/Tool.ts +0 -32
  454. package/source/directives/mcp/index.ts +0 -6
  455. package/source/directives/oauth/Discovery.ts +0 -66
  456. package/source/directives/oauth/documents.ts +0 -110
  457. package/source/directives/oauth/index.ts +0 -3
  458. package/source/directives/octets/Context.ts +0 -23
  459. package/source/directives/octets/Delete.ts +0 -96
  460. package/source/directives/octets/Directive.ts +0 -21
  461. package/source/directives/octets/Get.ts +0 -88
  462. package/source/directives/octets/Octets.ts +0 -82
  463. package/source/directives/octets/Put.ts +0 -186
  464. package/source/directives/octets/Workflow.ts +0 -60
  465. package/source/directives/octets/bytes.test.ts +0 -33
  466. package/source/directives/octets/bytes.ts +0 -18
  467. package/source/directives/octets/index.ts +0 -3
  468. package/source/directives/octets/schemas.test.ts +0 -20
  469. package/source/directives/octets/schemas.ts +0 -15
  470. package/source/directives/octets/types.ts +0 -9
  471. package/source/directives/octets/workflows/Execution.ts +0 -130
  472. package/source/directives/octets/workflows/Workflow.ts +0 -51
  473. package/source/directives/octets/workflows/index.ts +0 -1
  474. package/source/directives/require/Directive.ts +0 -5
  475. package/source/directives/require/Headers.ts +0 -19
  476. package/source/directives/require/Require.ts +0 -27
  477. package/source/directives/require/index.ts +0 -3
  478. package/source/discovery.ts +0 -1
  479. package/source/exceptions.ts +0 -47
  480. package/source/index.ts +0 -12
  481. package/source/io.ts +0 -4
  482. package/source/manifest.test.ts +0 -56
  483. package/source/manifest.ts +0 -56
  484. package/source/octets.d.ts +0 -17
  485. package/source/root.ts +0 -59
  486. package/source/schemas.test.ts +0 -31
  487. package/source/schemas.ts +0 -15
  488. package/source/service.ts +0 -94
  489. package/source/shortcuts.ts +0 -14
  490. package/source/userland.ts +0 -47
  491. package/transpiled/Annotation.d.ts +0 -70
  492. package/transpiled/Annotation.js +0 -2
  493. package/transpiled/Annotation.js.map +0 -1
  494. package/transpiled/RTD/syntax/parse.d.ts +0 -4
  495. package/transpiled/RTD/syntax/parse.js +0 -112
  496. package/transpiled/RTD/syntax/parse.js.map +0 -1
  497. package/transpiled/RTD/syntax/types.d.ts +0 -52
  498. package/transpiled/RTD/syntax/types.js +0 -11
  499. package/transpiled/RTD/syntax/types.js.map +0 -1
  500. package/transpiled/const.d.ts +0 -36
  501. package/transpiled/const.js +0 -37
  502. package/transpiled/const.js.map +0 -1
  503. package/transpiled/deployment.d.ts +0 -6
  504. package/transpiled/deployment.js +0 -76
  505. package/transpiled/deployment.js.map +0 -1
  506. package/transpiled/manifest.d.ts +0 -3
  507. package/transpiled/manifest.js +0 -39
  508. package/transpiled/manifest.js.map +0 -1
  509. package/transpiled/schemas.d.ts +0 -9
  510. package/transpiled/schemas.js +0 -9
  511. package/transpiled/schemas.js.map +0 -1
  512. package/transpiled/shortcuts.d.ts +0 -3
  513. package/transpiled/shortcuts.js +0 -13
  514. package/transpiled/shortcuts.js.map +0 -1
  515. package/tsconfig.json +0 -13
  516. package/tsconfig.tsbuildinfo +0 -1
  517. package/ui/dist/_app/immutable/assets/0.Bl7vLmIK.css +0 -2
  518. package/ui/dist/_app/immutable/assets/2.BC0-Jhqu.css +0 -1
  519. package/ui/dist/_app/immutable/chunks/B_pK3U1C.js +0 -6
  520. package/ui/dist/_app/immutable/chunks/CiKbPLyY.js +0 -1
  521. package/ui/dist/_app/immutable/chunks/DjIYL2zC.js +0 -3
  522. package/ui/dist/_app/immutable/entry/app.DMqmL4NY.js +0 -2
  523. package/ui/dist/_app/immutable/entry/start.CRe7HWBI.js +0 -1
  524. package/ui/dist/_app/immutable/nodes/0.D9m-6cbM.js +0 -1
  525. package/ui/dist/_app/immutable/nodes/1.Cgi_RcSO.js +0 -1
  526. package/ui/dist/_app/immutable/nodes/2.D_Cbxgz4.js +0 -14
@@ -1,167 +0,0 @@
1
- # I/O restrictions
2
-
3
- The Exposition comes with `io` directives to control access to the operation's input and output
4
- properties, and to let an operation state the status of its reply.
5
-
6
- ## Input
7
-
8
- The `io:input` optional directive contains a list of properties that are allowed to be specified in
9
- the request body.
10
-
11
- ```yaml
12
- POST:
13
- endpoint: create
14
- io:input: [name, location]
15
- ```
16
-
17
- The list must be a valid subset of the operation's input properties.
18
-
19
- If `io:input` is specified and the request body is not an object, or contains properties that are
20
- not in the list, the request will be rejected with a `400` status code.
21
-
22
- > Therefore, `io:input` is only applicable to operations which input is an object or an
23
- > array of objects.
24
-
25
- ## Output
26
-
27
- The `io:output` mandatory directive contains a list of properties that are allowed to be included in
28
- the response body.
29
-
30
- ```yaml
31
- GET:
32
- endpoint: observe
33
- io:output: [name, location]
34
- ```
35
-
36
- When an operation does not return an object (e.g., a primitive or a stream), or an object is dynamic
37
- and its properties are not known in advance, `io:output` may have a value of `true` to disable
38
- output restrictions.
39
-
40
- ```yaml
41
- GET:
42
- endpoint: proxy
43
- io:output: true
44
- ```
45
-
46
- If a method declaration lacks `io:output` directive, it will trigger a warning, and its
47
- response will consistently be empty.
48
- If this behavior is intended, a `false` value can be employed to suppress warnings.
49
-
50
- ```yaml
51
- GET:
52
- endpoint: conceal
53
- io:output: false
54
- ```
55
-
56
- Output restrictions are not applied to stream responses, nor to a reply the gateway built out of an
57
- exception — an operation that returns an error is answered with a code and a message of the
58
- gateway's own, and a list of permitted properties has nothing to say about those. A reply the
59
- operation returned is restricted whatever status it carries, see [Status](#status).
60
-
61
- ## Status
62
-
63
- The `io:status` optional directive names a property of the reply that carries the status of the
64
- response. The property is removed from the body.
65
-
66
- ```yaml
67
- POST:
68
- endpoint: register
69
- io:status: status
70
- io:output: [client_id, client_name, error, error_description]
71
- ```
72
-
73
- ```javascript
74
- return { status: 400, error: 'invalid_redirect_uri' }
75
- ```
76
-
77
- ```http
78
- 400 Bad Request
79
-
80
- error: invalid_redirect_uri
81
- ```
82
-
83
- A reply that does not carry the property is answered with the status it would have been. A property
84
- that is not a number is an error.
85
-
86
- This is for an outcome the operation knows and the transport does not — a protocol that states its
87
- error as a body rather than as a status of its own, or a request that created where it might have
88
- updated. Such an operation returns no error: both replies are its output, and `io:output` permits
89
- the properties of both. An operation that does return an error is unaffected — that reply is the
90
- gateway's, and is not restricted.
91
-
92
- ## Throttling
93
-
94
- The `io:throttle` directive limits the rate of requests meeting the specified criteria.
95
-
96
- ```yaml
97
- exposition:
98
- /:
99
- io:throttle:
100
- key:
101
- - route
102
- - ip
103
- condition:
104
- status: 404
105
- requests: 500
106
- interval: 30
107
- ```
108
-
109
- Requests are metered per `key`. A key may spend `requests` at once, and earns them back at a rate of
110
- `requests` per `interval` seconds. A request carrying a key with nothing left to spend is answered
111
- `429 Too Many Requests`, with a `Retry-After` saying how long until one would be admitted again.
112
- `interval` is in seconds.
113
-
114
- So `requests` is the burst, and `requests / interval` the rate it is repaid at. There is no window to
115
- save a budget up in and spend twice across the edge of, and no lockout to sit out: a key that has
116
- overspent is admitted again as soon as it has earned a single request back, and a client that keeps
117
- asking meanwhile is not penalised for it.
118
-
119
- `requests` is a budget for the **whole group** of gateway instances, not for one of them. Instances
120
- reconcile through Redis on a timer, so they converge on one number rather than each enforcing the
121
- limit separately. Between two of those, an instance goes on what it alone has spent — so the group
122
- can overshoot by what the other instances admit within that window, and by no more. The window is a
123
- tenth of `interval`, between a quarter of a second and two seconds, whatever `interval` is. Precise
124
- per-request enforcement is not what this is for.
125
-
126
- An instance that cannot reach Redis keeps throttling on what it has seen itself and keeps serving,
127
- and reports what it could not the next time it gets through.
128
-
129
- ### Key components
130
-
131
- What a request is metered against. Give one, or a list — a list keys on the combination, so
132
- `[route, ip]` meters each address separately on each route.
133
-
134
- - `ip` — the client address, as the request context resolved it. See [Client address](ip.md) for
135
- where it is read from and why.
136
- - `path` — the path the request came in on, `/users/1`.
137
- - `route` — the route as declared, `/users/:id`. Every path matching the route shares one budget,
138
- which `path` cannot do: keyed on `path`, walking ids is a way around the limit.
139
- - `identity` — the authenticated identity. Requests carrying none share a single budget between
140
- them, so pair it with `ip` if that matters.
141
- - `segment: <name>` — the value bound to a named route segment, `1` for `:id` in `/users/:id`.
142
-
143
- ### Conditions
144
-
145
- What is metered, as opposed to what it is metered against. A request that fails a condition is served
146
- and costs nothing. Conditions are evaluated against the response, so they cannot decide whether to
147
- refuse a request — only whether it is charged for, once it has been answered.
148
-
149
- - `status: <code>` — charge only for responses with this status.
150
-
151
- ```yaml
152
- io:throttle:
153
- key: ip
154
- condition:
155
- status: 404
156
- requests: 20
157
- interval: 600
158
- ```
159
-
160
- An address may probe for twenty missing paths at once, and thereafter for one every thirty seconds.
161
- Requests that find something are served and never counted against it.
162
-
163
- ## Introspection
164
-
165
- What these admit is what [`OPTIONS`](introspection.md) states: `io:input` restricts the input
166
- schema, `io:output` the output schema, and a method declaring no `io:output` states no output at
167
- all — nothing of the reply is sent.
@@ -1,24 +0,0 @@
1
- # Client address
2
-
3
- The address a request comes from is resolved once, into the request context, and read from there
4
- by whatever keys on it: the meter of [failed authentications](identity.md#failed-authentications)
5
- and the `ip` key of [`io:throttle`](io.md#key-components).
6
-
7
- ```yaml
8
- # context.toa.yaml
9
-
10
- exposition:
11
- ip: cf-connecting-ip
12
- ```
13
-
14
- `ip` names the header the address is read from. In production the gateway sits behind a load
15
- balancer, an ingress or a CDN: the connection it accepts comes from that machine, so every client
16
- shares one address and nothing tells them apart. The edge is the one that saw the client connect,
17
- and it writes the client's address into a header of its own, `CF-Connecting-IP`, `X-Real-IP` or
18
- `X-Forwarded-For`, depending on the infrastructure. A client may send any of these headers too, so
19
- the gateway trusts none of them on its own: the deployment names the one its edge overwrites, and
20
- where the header holds a list, the last value is the one the edge appended.
21
-
22
- The connection's address is never used. Without `ip`, or for a request that does not carry the
23
- header, the request has no address: the bouncer and a throttle keyed on `ip` let it through and
24
- say so in the log, once per hundred seconds rather than once per request.
@@ -1,123 +0,0 @@
1
- # HTTP context mapping
2
-
3
- The `map` directive family is used to map HTTP request parts to operation call input properties.
4
-
5
- [Features](../features/map.feature).
6
-
7
- ## TL;DR
8
-
9
- ```yaml
10
- exposition:
11
- /:group:
12
- languages: [en, fr] # supported languages
13
- GET:
14
- map:authority: hostname # request authority (e.g., hostname)
15
- map:language: lang # requested language
16
- map:headers: # raw header values
17
- token: x-access-token
18
- map:buffer: body # unparsed request body
19
- map:segments: # route parameters
20
- group: group
21
- map:claims: # Bearer token claims
22
- address: email
23
- verified: email_verified
24
- endpoint: observe
25
- ```
26
-
27
- The operation input type must be an object.
28
- If the input already contains the specified keys, they will be overwritten.
29
-
30
- ## Authority
31
-
32
- The `map:authority` directive maps the [authority identifier](authorities.md) to an operation call
33
- input property specified by the directive value.
34
-
35
- ### Language
36
-
37
- The `map:language` mapping sets the [most matching](https://github.com/jshttp/negotiator) language
38
- code based on the `accept-language` request header and a list of supported languages defined by
39
- the `map:languages` directive, and also adds `accept-language` to the `Vary` HTTP response header
40
- value.
41
-
42
- If none of the supported languages match, the first supported language is used.
43
-
44
- > `map:languages` has a shorthand form: `languages: [en, fr]`.
45
-
46
- ## Header values
47
-
48
- The `map:headers` directive maps the values of HTTP request headers to operation call input
49
- properties.
50
- The value of the directive is a map where keys are the names of the input properties and values are
51
- the names of the HTTP request headers.
52
-
53
- The names of these headers are then included in the `Vary` HTTP response header
54
- and [Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)
55
- of the [CORS](protocol.md#cors).
56
-
57
- [Multiple header fields](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) are combined
58
- as a comma-separated list.
59
-
60
- ## Raw body
61
-
62
- The `map:buffer` directive maps the unparsed request body to an operation call input property.
63
- The directive value is the name of the input property.
64
-
65
- ```yaml
66
- /webhook:
67
- POST:
68
- map:buffer: body
69
- map:headers:
70
- signature: x-signature
71
- endpoint: verify
72
- ```
73
-
74
- The body is read from the request stream as raw bytes and delivered as a UTF-8 string.
75
-
76
- Body parsing is bypassed, so the route does not depend on a supported `Content-Type` or format decoding. The request stream is consumed; a route with `map:buffer` cannot also receive a parsed body from the same request.
77
-
78
- ## Route parameters
79
-
80
- The `map:segments` directive maps the values of route parameters to operation call input properties.
81
- The value of the directive is a map where keys are the names of the input properties, and values are
82
- the names of the route parameters.
83
-
84
- Parameter name may be prefixed with `~`
85
- to indicate that the parameter should not be available to the
86
- remaining directives or used as criteria in the operation call.
87
-
88
- ```yaml
89
- /:id/:tag:
90
- POST:
91
- map:segments:
92
- id: id
93
- tag: ~tag
94
- endpoint: create
95
- ```
96
-
97
- Wildcard routes are supported by using `**` as the parameter name.
98
-
99
- ```yaml
100
- /path/to/**:
101
- GET:
102
- map:segments:
103
- path: '**'
104
- endpoint: observe
105
- ```
106
-
107
- ## Bearer token claims
108
-
109
- The `map:claims` directive maps the values of
110
- the [token claims](https://datatracker.ietf.org/doc/html/rfc7519#section-4).
111
- The value of the directive is a map where keys are the names of the input properties and values are
112
- the names of the claims.
113
-
114
- If the claim is not present in the token or the request is not authenticated using
115
- the [`Bearer` scheme](identity.md#bearer-scheme), the input properties are not set.
116
-
117
- ## Introspection
118
-
119
- A property a mapping fills is not the caller's to send, so [`OPTIONS`](introspection.md) takes it
120
- out of the input. `map:headers` states it under `headers`, naming the header it is read from, and
121
- `map:segments` under `route`, named as the property rather than as the segment. The rest —
122
- `map:claims`, `map:authority`, `map:language`, `map:buffer` — come from the request itself, and a
123
- caller has nowhere to put one.
@@ -1,183 +0,0 @@
1
- # Model Context Protocol
2
-
3
- An application annotates it, and the methods it names as tools are what a model may call.
4
-
5
- ```yaml
6
- exposition:
7
- mcp:
8
- name: Teapots
9
- instructions: A pot is read by its id. A pot that is brewing cannot be emptied.
10
- origins: [https://claude.ai]
11
- ```
12
-
13
- <dl>
14
- <dt><code>name</code></dt>
15
- <dd>Required. What the server calls itself, which a client shows a user.</dd>
16
- <dt><code>instructions</code></dt>
17
- <dd>What a model is told before it calls anything here.</dd>
18
- <dt><code>origins</code></dt>
19
- <dd>Browser origins the endpoint answers. A request carrying an <code>Origin</code> that is not
20
- listed is <code>403</code>, and an empty list admits none; a request carrying none is unaffected.</dd>
21
- <dt><code>anonymous</code></dt>
22
- <dd>Whether the endpoint answers without a credential. It does not unless it says so.</dd>
23
- </dl>
24
-
25
- Without the annotation `/.mcp` is a path like any other, and nothing answers there. The path is
26
- fixed: one an application could choose is one it could collide with a route of its own.
27
-
28
- ## What a tool is
29
-
30
- A tool is an RTD method that says it is one, named as the [procedure](rpc.md#the-name) it is:
31
-
32
- ```yaml
33
- /pots:
34
- GET:
35
- mcp:tool: true
36
- help:method: Every pot there is, newest first.
37
- endpoint: enumerate
38
- /hot:
39
- GET:
40
- query: { criteria: temperature=gt=80 }
41
- mcp:tool: true
42
- help:method:
43
- title: Hot pots
44
- description: The pots that are too hot to pour.
45
- endpoint: enumerate
46
- ```
47
-
48
- A default denies, and a tree holds everything an application serves — its identity endpoints, its
49
- uploads, the machinery of the authorization flow the model already came through. Publishing all of
50
- it would spend a model's context on what it has no business calling.
51
-
52
- `mcp:tool` says only whether the method is published. What the tool is called and what it is for is
53
- [`help:method`](help.md), which is what describes the method everywhere else as well — a tool a
54
- model cannot read the purpose of is one it cannot choose, so declare one beside the other.
55
-
56
- A declaration is inherited by everything below it, as every directive is, and the nearer one wins —
57
- so a node publishes a subtree, and `mcp:tool: false` withdraws one method of it.
58
-
59
- A route whose name a client [cannot spell](rpc.md#what-has-a-name) is refused where the directive
60
- is built, rather than served as a tool that is quietly never listed.
61
-
62
- `tools/list` answers every published method this caller may reach — a method whose directives refuse
63
- them is not listed, and a route with [no name](rpc.md#what-has-a-name) is not either. `tools/call`
64
- answers `404` to a name that is not published, whether or not a route would have taken it: what an
65
- application did not publish is not reachable by guessing what it would have been called.
66
-
67
- `annotations` are read from the verb: `GET` and `HEAD` are `readOnlyHint`, `DELETE` is
68
- `destructiveHint`, `PUT` and `DELETE` are `idempotentHint`.
69
-
70
- ## What a tool takes
71
-
72
- `inputSchema` is the procedure's `params`, which is what the method
73
- [says of itself](introspection.md): a route variable by the name the template gives it, the
74
- querystring under `query`, and what is left is the body. `io:input` restricts it, and a property
75
- `map` fills is not there — a call carries no headers of its own.
76
-
77
- `query` carries what selects records — `criteria`, `sort`, `limit`, `omit`, `search` — beside the
78
- parameters the resource declares. `OPTIONS` states only the latter, because the former is the same
79
- of every queryable resource; here it is stated, because here it is something the caller sends.
80
-
81
- ```yaml
82
- type: object
83
- properties:
84
- id: { type: string, pattern: ^[a-fA-F0-9]{32}$ }
85
- query:
86
- type: object
87
- properties:
88
- criteria: { type: string }
89
- sort: { type: string }
90
- limit: { type: integer, minimum: 1, maximum: 100, default: 10 }
91
- omit: { type: integer, minimum: 0, maximum: 1000, default: 0 }
92
- required: [id]
93
- additionalProperties: false
94
- ```
95
-
96
- ## What a tool answers
97
-
98
- `content` carries one `text` block holding the reply's JSON, and `structuredContent` the reply
99
- itself. A reply of nothing is an empty `content`.
100
-
101
- `outputSchema` is what the operation declares, restricted by `io:output`. An operation's `output` is
102
- optional and normalizes to `{}`, which describes nothing, and none is stated for it — an
103
- application that wants the schema declares the operation's `output`.
104
-
105
- An operation that refuses answers a result with `isError: true` carrying its message, not an error
106
- of the protocol: it is something a model reads and may correct itself by.
107
-
108
- ## Two revisions
109
-
110
- Both are answered from one endpoint that remembers nothing between requests.
111
- [`2026-07-28`](https://modelcontextprotocol.io/specification/2026-07-28) carries the version and
112
- the client's capabilities in every request; `2025-11-25` opens with `initialize`. Which one a
113
- request is, is read from `MCP-Protocol-Version`, or from
114
- `_meta['io.modelcontextprotocol/protocolVersion']` where the header is absent; `initialize` is one
115
- by itself, and a request naming no version is of a revision that sent none.
116
-
117
- | method | |
118
- | --------------------------- | -------------------------------------------------------------------------- |
119
- | `server/discover` | what is served, and who serves it |
120
- | `tools/list` | every tool this caller may reach, in a stable order |
121
- | `tools/call` | the call the tool is |
122
- | `initialize` | the same as `server/discover`, in the shape a client of `2025-11-25` reads |
123
- | `notifications/initialized` | `202`, and nothing done |
124
- | `ping` | `{}` |
125
-
126
- `POST` only, one message per request; `GET` and `DELETE` are `405`. An `Mcp-Session-Id` is ignored
127
- and none is minted, a `Last-Event-ID` is ignored, and `accept` is negotiated as everywhere else.
128
-
129
- Of the modern revision, `MCP-Protocol-Version` and `Mcp-Method` are required, and `Mcp-Name` for a
130
- `tools/call`; each must say what the body says. `_meta` states the protocol version and the client's
131
- capabilities. Every result carries `resultType` and names the server in its own `_meta`, and a
132
- `server/discover` or a `tools/list` carries how long it may be held: half an hour, `public` for the
133
- first and `private` for the second, which is filtered by the identity that asked.
134
-
135
- Neither `listChanged` nor a subscription is declared: both are a stream held open, and this endpoint
136
- holds none.
137
-
138
- ## Authorization
139
-
140
- The endpoint is a protected resource, and an application advertises it as one:
141
-
142
- ```yaml
143
- exposition:
144
- oauth:
145
- authorize: https://app.example.com/oauth/authorize
146
- resources: ['/.mcp']
147
- ```
148
-
149
- Its RFC 9728 document is then read at `/.well-known/oauth-protected-resource/.mcp`, and the
150
- canonical URI of the resource is `https://api.example.com/.mcp`. See [OAuth](oauth.md).
151
-
152
- A request without a credential is `401`, carrying the challenge that names that document — which is
153
- where the flow starts. A call the identity is not authorized to make is `403` with
154
- `error="insufficient_scope"`. Each tool is authorized as the resource it is, against the path and
155
- the verb its name states.
156
-
157
- A route that is [`anonymous`](access.md#anonymous) is reached here whatever the client presented:
158
- the rule that refuses a credentialed request is about a cacheable reply, and what a tool answers is
159
- not one. So a resource that is public over HTTP is a public tool, and nothing in a manifest has to
160
- say it twice.
161
-
162
- ## What refuses
163
-
164
- | | |
165
- | -------- | ------------------------------------------------------ |
166
- | `-32700` | the body is not readable |
167
- | `-32600` | the body is not one JSON-RPC message |
168
- | `-32601` | no method of that name, at `404` |
169
- | `-32602` | the arguments do not fit, or `_meta` states too little |
170
- | `-32603` | anything the gateway did not mean to answer |
171
- | `-32020` | a header says one thing and the body another |
172
- | `-32022` | a revision neither served, naming both |
173
-
174
- The codes MCP reserves for itself are `-32020` to `-32099`, and it has an implementation use none of
175
- `-32000` to `-32019` — which is where [JSON-RPC](rpc.md#what-refuses) has this gateway's own, so none
176
- of those is answered here.
177
-
178
- ## References
179
-
180
- - [The specification](https://modelcontextprotocol.io/specification/2026-07-28)
181
- - [JSON-RPC](rpc.md), where a procedure gets its name
182
- - [Introspection](introspection.md), which is what a tool's schemas are
183
- - [Features](../features/mcp.feature)
Binary file
@@ -1,59 +0,0 @@
1
- # Distributed Peer Discovery
2
-
3
- ## Problem
4
-
5
- Modulo partitioning algorithm `taks.id % replicas == index` requires
6
- to know the number of task processing instances running in the cluster,
7
- and the own index of the current instance.
8
-
9
- ## Forces
10
-
11
- 1. Static configuration is not an option (due to dynamic scaling / failover).
12
- 2. In a distributed system, there is no concept of a _global current time_.
13
-
14
- ## Solution
15
-
16
- An algorithm that emits `(index, replicas)` once per `interval` seconds, using common Redis
17
- key and atomic increment.
18
-
19
- Define the following parameters:
20
-
21
- - `name`: a name of the task processing (e.g. `mail-sender`)
22
- - `interval`: indexing interval that is deliberately greater than the expected clock skew among
23
- instances
24
-
25
- At the start of each `interval` in [Unix epoch](https://en.wikipedia.org/wiki/Unix_time):
26
-
27
- 1. Calculate an ordinal number of the current interval: `number = ceil(now() / interval)`
28
- 2. Compose a `key` as `{name}:{number}`
29
- 3. Atomically increment a `key` in Redis ([INCR](https://redis.io/docs/latest/commands/incr/))
30
- 4. If `index` is defined (see 5)
31
-
32
- - get the value of previous key `{name}:{number-1}` as `replicas`
33
- - if the `replicas` is defined, emit `(index, replicas)` **algorithm result**
34
-
35
- 5. Store the response (3) in `index`.
36
-
37
- ## Safe index transition
38
-
39
- If the `index` or `replicas` changes, the algorithm consumer must stop consuming new tasks
40
- and execute _safe index transition_, to prevent task duplication or loss.
41
-
42
- The transition can be implemented in a manner similar to the described algorithm, using a dedicated
43
- `{name}:transition` key.
44
- However, this process is considered outside the scope of this document.
45
-
46
- ## Extension
47
-
48
- If the system clocks are too precisely synchronized (skew is less than a round-trip time to Redis),
49
- this may result in continuous [index transitions](#safe-index-transition).
50
-
51
- To mitigate this, the algorithm can be extended with a random delay:
52
-
53
- 1. Before starting the algorithm, define a random constant clock skew, significantly smaller than
54
- `interval`: `skew = random() * (interval / 2)`
55
- 2. Start the algorithm at each `interval + skew`.
56
-
57
- ## Caveats
58
-
59
- - The first result will become known between `interval` and `interval × 2` seconds.
@@ -1,71 +0,0 @@
1
- # Note: Server Sent Events
2
-
3
- ## TL;DR
4
-
5
- 1. Doesn't exist.
6
- 2. Ridiculous.
7
- 3. Redundant.
8
-
9
- ## There is no SSE
10
-
11
- The initial premise of SSE is to deliver real-time events specifically targeted at a particular user. It's evident that
12
- to access these events, user authentication is essential, typically implemented through
13
- an [HTTP Authentication framework](https://datatracker.ietf.org/doc/html/rfc2617).
14
-
15
- However, despite this being the most straightforward
16
- scenario, [it does not work this way](https://github.com/whatwg/html/issues/2177). The only viable way to use SSE is
17
- to avoid the standard `EventSource` implementation.
18
-
19
- ## Peculiar event format
20
-
21
- ### SLAP
22
-
23
- [Event stream format](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format)
24
- defines four fields: `event`, `data`, `id`, `retry`.
25
-
26
- In practice, code capable of producing such an object is forced to break the Single Level of Abstraction Principle. This
27
- requires knowledge of both event structures and connection properties. In real-world systems, these may be handled by
28
- different processes, such as an Events microservice and an API Gateway.
29
-
30
- ### Content negotiation
31
-
32
- The `data` property is expected to be an arbitrary string, although real-world event data is often structured as an
33
- object.
34
-
35
- Furthermore, since the Event stream format defines its own content type, there is no built-in way to negotiate the
36
- format of the events.
37
-
38
- Additionally, the `data` value is limited to a single line, which hinders the use of
39
- more [human-friendly formats](https://yaml.org) in a straightforward manner.
40
-
41
- ## HTTP is enough
42
-
43
- Rather than resorting to a non-standard client and a predefined content format, a basic HTTP request can provide a
44
- solution:
45
-
46
- ```http
47
- GET /events/ HTTP/1.1
48
- accept: application/yaml
49
- ```
50
-
51
- ```
52
- 200 OK
53
- content-type: application/yaml
54
- transfer-encoding: chunked
55
-
56
- id: 1
57
- event: created
58
- data:
59
- foo: bar
60
-
61
- id: 2
62
- event: deleted
63
- data:
64
- bar: baz
65
- ```
66
-
67
- Server-side implementation with flow control and stream termination handling is trivial:
68
-
69
- ```javascript
70
- eventStream.pipe(response)
71
- ```