langgraph-api 0.18.0.dev8__tar.gz → 0.18.0.dev10__tar.gz

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 (340) hide show
  1. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/PKG-INFO +3 -1
  2. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/continuous/uv.lock +3 -3
  3. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/package.json +1 -1
  4. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/yarn.lock +4 -4
  5. langgraph_api-0.18.0.dev10/langgraph_api/__init__.py +1 -0
  6. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/__init__.py +21 -0
  7. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/_calls.py +6 -0
  8. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/_constants.py +11 -0
  9. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/_routes.py +35 -0
  10. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/mcp/_sanitizers.py +43 -0
  11. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/_sdk.py +40 -0
  12. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/_server.py +66 -0
  13. langgraph_api-0.18.0.dev10/langgraph_api/api/mcp/_tools.py +219 -0
  14. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/meta.py +2 -0
  15. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/openapi.py +2 -3
  16. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/threads.py +76 -15
  17. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/config/__init__.py +3 -1
  18. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/service.py +10 -4
  19. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/executor/__main__.py +32 -9
  20. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/feature_flags.py +1 -0
  21. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/ops/threads.py +6 -0
  22. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/package.json +18 -18
  23. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/yarn.lock +482 -532
  24. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/logging.py +7 -1
  25. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/metadata.py +5 -1
  26. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/schema.py +13 -0
  27. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/state.py +52 -2
  28. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/worker.py +4 -6
  29. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/checkpointer.py +20 -0
  30. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/checkpointer_pb2.py +30 -30
  31. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +9 -1
  32. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/orchestrator_pb2.py +12 -12
  33. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/orchestrator_pb2.pyi +8 -1
  34. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/openapi.json +57 -0
  35. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/pyproject.toml +2 -0
  36. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/uv.lock +313 -6
  37. langgraph_api-0.18.0.dev8/langgraph_api/__init__.py +0 -1
  38. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/__init__.py +0 -14
  39. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/_calls.py +0 -29
  40. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/_constants.py +0 -28
  41. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/_handlers.py +0 -365
  42. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/_models.py +0 -29
  43. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/_protocol.py +0 -224
  44. langgraph_api-0.18.0.dev8/langgraph_api/api/mcp/_routes.py +0 -37
  45. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/.gitignore +0 -0
  46. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/LICENSE +0 -0
  47. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/Makefile +0 -0
  48. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/README.md +0 -0
  49. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/.gitignore +0 -0
  50. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/Makefile +0 -0
  51. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/README.md +0 -0
  52. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/REPORTS.md +0 -0
  53. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/assistant.ts +0 -0
  54. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  55. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  56. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  57. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  58. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/classify-error.test.js +0 -0
  59. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/classify-error.ts +0 -0
  60. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
  61. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
  62. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/delta_turns.ts +0 -0
  63. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  64. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/interrupt_resume.ts +0 -0
  65. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/log-failure.ts +0 -0
  66. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  67. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/store.ts +0 -0
  68. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/stream_write.ts +0 -0
  69. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/thread.ts +0 -0
  70. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  71. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  72. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/types.ts +0 -0
  73. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/benchmark-runners/wait_write.ts +0 -0
  74. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/capacity-ci.js +0 -0
  75. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/capacity-ci.test.js +0 -0
  76. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/clean-cli.js +0 -0
  77. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/clean.js +0 -0
  78. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/continuous/README.md +0 -0
  79. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/continuous/pyproject.toml +0 -0
  80. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/continuous/runner.py +0 -0
  81. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/daily-report.js +0 -0
  82. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/daily-report.test.js +0 -0
  83. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/delta-report.js +0 -0
  84. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/delta-report.test.js +0 -0
  85. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/graphs.js +0 -0
  86. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/history.js +0 -0
  87. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/history.test.js +0 -0
  88. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/host-v2.js +0 -0
  89. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/host-v2.test.js +0 -0
  90. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/multer.test.js +0 -0
  91. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/ramp.js +0 -0
  92. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/reporting/dd_reporting.py +0 -0
  93. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/runner-descriptions.js +0 -0
  94. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/server-metrics.js +0 -0
  95. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/server-metrics.test.js +0 -0
  96. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/slack.js +0 -0
  97. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/staircase.py +0 -0
  98. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/staircase_step_k6.js +0 -0
  99. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/tsconfig.json +0 -0
  100. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/update-revision.js +0 -0
  101. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/benchmark/weather.js +0 -0
  102. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/constraints.txt +0 -0
  103. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/custom_store.sql +0 -0
  104. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/forbidden.txt +0 -0
  105. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/hatch_build.py +0 -0
  106. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/healthcheck.py +0 -0
  107. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  108. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/_checkpointer/__init__.py +0 -0
  109. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/_checkpointer/_adapter.py +0 -0
  110. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/_checkpointer/protocol.py +0 -0
  111. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/_factory_utils.py +0 -0
  112. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/__init__.py +0 -0
  113. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2a.py +0 -0
  114. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2ui.py +0 -0
  115. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2ui_schemas/README.md +0 -0
  116. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
  117. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
  118. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
  119. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
  120. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/assistants.py +0 -0
  121. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/event_streaming.py +0 -0
  122. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/mcp/_origins.py +0 -0
  123. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/mcp/_outcome.py +0 -0
  124. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/profile.py +0 -0
  125. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/runs.py +0 -0
  126. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/store.py +0 -0
  127. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/api/ui.py +0 -0
  128. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/asgi_transport.py +0 -0
  129. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/asyncio.py +0 -0
  130. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/__init__.py +0 -0
  131. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/custom.py +0 -0
  132. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/errors.py +0 -0
  133. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/langsmith/__init__.py +0 -0
  134. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/langsmith/backend.py +0 -0
  135. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/langsmith/client.py +0 -0
  136. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/middleware.py +0 -0
  137. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/noop.py +0 -0
  138. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/auth/studio_user.py +0 -0
  139. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
  140. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/cache.py +0 -0
  141. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/cli.py +0 -0
  142. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/command.py +0 -0
  143. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/config/_parse.py +0 -0
  144. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/config/schemas.py +0 -0
  145. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/cron_scheduler.py +0 -0
  146. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/drain.py +0 -0
  147. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/encryption/__init__.py +0 -0
  148. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/encryption/aes_json.py +0 -0
  149. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/encryption/context.py +0 -0
  150. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/encryption/custom.py +0 -0
  151. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/encryption/middleware.py +0 -0
  152. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/encryption/shared.py +0 -0
  153. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/errors.py +0 -0
  154. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/__init__.py +0 -0
  155. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/capabilities.py +0 -0
  156. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/constants.py +0 -0
  157. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  158. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/namespace.py +0 -0
  159. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/session.py +0 -0
  160. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  161. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/event_streaming/types.py +0 -0
  162. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/executor/__init__.py +0 -0
  163. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/graph.py +0 -0
  164. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/__init__.py +0 -0
  165. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/client.py +0 -0
  166. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  167. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/ops/__init__.py +0 -0
  168. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/ops/assistants.py +0 -0
  169. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/ops/cache.py +0 -0
  170. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/ops/crons.py +0 -0
  171. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/ops/runs.py +0 -0
  172. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/server.py +0 -0
  173. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/servicers/__init__.py +0 -0
  174. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  175. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/grpc/servicers/encryption.py +0 -0
  176. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/http.py +0 -0
  177. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/http_metrics.py +0 -0
  178. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/http_metrics_utils.py +0 -0
  179. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/.gitignore +0 -0
  180. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/.prettierrc +0 -0
  181. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/.yarnclean +0 -0
  182. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/__init__.py +0 -0
  183. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/base.py +0 -0
  184. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/build.mts +0 -0
  185. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/client.http.mts +0 -0
  186. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/client.mts +0 -0
  187. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/errors.py +0 -0
  188. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/global.d.ts +0 -0
  189. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/remote.py +0 -0
  190. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/schema.py +0 -0
  191. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/auth-mutations.mts +0 -0
  192. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/graph.mts +0 -0
  193. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/load.hooks.mjs +0 -0
  194. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/preload.mjs +0 -0
  195. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  196. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/utils/files.mts +0 -0
  197. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/utils/importMap.mts +0 -0
  198. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  199. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/src/utils/serde.mts +0 -0
  200. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/sse.py +0 -0
  201. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/traceblock.mts +0 -0
  202. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/tsconfig.json +0 -0
  203. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/js/ui.py +0 -0
  204. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/lc_security/__init__.py +0 -0
  205. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/lc_security/exceptions.py +0 -0
  206. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/lc_security/policy.py +0 -0
  207. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/lc_security/transport.py +0 -0
  208. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/metrics_collector.py +0 -0
  209. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/metrics_otlp.py +0 -0
  210. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/middleware/__init__.py +0 -0
  211. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/middleware/ensure_store.py +0 -0
  212. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/middleware/http_logger.py +0 -0
  213. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/middleware/private_network.py +0 -0
  214. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/middleware/request_id.py +0 -0
  215. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/models/__init__.py +0 -0
  216. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/models/run.py +0 -0
  217. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/operator_routes.py +0 -0
  218. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/otel_context.py +0 -0
  219. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/patch.py +0 -0
  220. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/queue_entrypoint.py +0 -0
  221. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/release_tags.py +0 -0
  222. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/route.py +0 -0
  223. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/self_hosted_logs.py +0 -0
  224. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/self_hosted_metrics.py +0 -0
  225. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/serde.py +0 -0
  226. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/server.py +0 -0
  227. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/sse.py +0 -0
  228. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/store.py +0 -0
  229. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/stream.py +0 -0
  230. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/stream_v2.py +0 -0
  231. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/timing/__init__.py +0 -0
  232. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/timing/profiler.py +0 -0
  233. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/timing/startup.py +0 -0
  234. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/timing/timer.py +0 -0
  235. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/traceblock.py +0 -0
  236. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/tracing_session.py +0 -0
  237. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/tunneling/cloudflare.py +0 -0
  238. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/__init__.py +0 -0
  239. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/cache.py +0 -0
  240. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/config.py +0 -0
  241. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/errors.py +0 -0
  242. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/extract.py +0 -0
  243. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/future.py +0 -0
  244. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/headers.py +0 -0
  245. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/network.py +0 -0
  246. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/retriable_client.py +0 -0
  247. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/stream_codec.py +0 -0
  248. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/utils/uuids.py +0 -0
  249. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/validation.py +0 -0
  250. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/webhook.py +0 -0
  251. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_api/worker_runtime.py +0 -0
  252. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/__init__.py +0 -0
  253. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/__init__.py +0 -0
  254. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/_compat.py +0 -0
  255. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  256. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/config.py +0 -0
  257. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/durability.py +0 -0
  258. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/store.py +0 -0
  259. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/struct.py +0 -0
  260. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/conversion/value.py +0 -0
  261. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/__init__.py +0 -0
  262. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  263. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  264. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  265. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  266. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  267. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  269. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  270. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  271. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  272. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  273. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  274. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  275. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  276. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  277. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  278. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  279. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  280. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  281. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  282. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  283. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  284. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  285. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  286. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  287. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  288. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  289. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  290. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  291. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  292. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  293. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  294. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  295. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  296. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  297. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  298. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  299. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  300. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  301. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  302. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  303. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  304. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  305. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  306. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  307. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  308. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  309. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  310. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  311. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  312. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  313. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  314. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  315. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  316. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/orchestrator_pb2_grpc.py +0 -0
  317. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/orchestrator_pb2_grpc.pyi +0 -0
  318. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/store_pb2.py +0 -0
  319. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
  320. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
  321. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
  322. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/serde.py +0 -0
  323. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_grpc_common/store.py +0 -0
  324. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_license/__init__.py +0 -0
  325. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_license/validation.py +0 -0
  326. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/__init__.py +0 -0
  327. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/checkpoint.py +0 -0
  328. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/database.py +0 -0
  329. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/encryption.py +0 -0
  330. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/lifespan.py +0 -0
  331. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/metrics.py +0 -0
  332. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/ops.py +0 -0
  333. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/queue.py +0 -0
  334. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/retry.py +0 -0
  335. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/routes.py +0 -0
  336. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/langgraph_runtime/store.py +0 -0
  337. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/logging.json +0 -0
  338. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/scripts/build_wheel.py +0 -0
  339. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/scripts/create_license.py +0 -0
  340. {langgraph_api-0.18.0.dev8 → langgraph_api-0.18.0.dev10}/scripts/run_a2a_tck.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.18.0.dev8
3
+ Version: 0.18.0.dev10
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -21,11 +21,13 @@ Requires-Dist: langgraph-runtime-inmem<0.39.0.dev0,>=0.38.0.dev0
21
21
  Requires-Dist: langgraph-sdk>=0.4.4
22
22
  Requires-Dist: langgraph<2,>=0.4.10
23
23
  Requires-Dist: langsmith[otel]>=0.6.3
24
+ Requires-Dist: mcp<3,>=2.3.0
24
25
  Requires-Dist: opentelemetry-api>=0.0.1
25
26
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=0.0.1
26
27
  Requires-Dist: opentelemetry-exporter-prometheus<0.64,>=0.63b1
27
28
  Requires-Dist: opentelemetry-sdk>=0.0.1
28
29
  Requires-Dist: orjson>=3.9.7
30
+ Requires-Dist: packaging>=23.2
29
31
  Requires-Dist: prometheus-client>=0.0.1
30
32
  Requires-Dist: protobuf<7.0.0,>=6.32.1
31
33
  Requires-Dist: pyjwt>=2.15.0
@@ -25,11 +25,11 @@ wheels = [
25
25
 
26
26
  [[package]]
27
27
  name = "certifi"
28
- version = "2025.11.12"
28
+ version = "2026.10.19"
29
29
  source = { registry = "https://pypi.org/simple" }
30
- sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" }
30
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size = 137598, upload-time = "2026-10-20T02:24:16.604Z" }
31
31
  wheels = [
32
- { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" },
32
+ { url = "https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size = 136464, upload-time = "2026-10-20T02:24:15.072Z" },
33
33
  ]
34
34
 
35
35
  [[package]]
@@ -14,7 +14,7 @@
14
14
  "quickchart-js": "^4.0.0"
15
15
  },
16
16
  "devDependencies": {
17
- "@types/k6": "^2.0.0",
17
+ "@types/k6": "^2.3.0",
18
18
  "typescript": "^6.0.3"
19
19
  },
20
20
  "overrides": {
@@ -38,10 +38,10 @@
38
38
  resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.53.tgz#2b4ffe34f7f40e14cc9556fd624370e4597d72f7"
39
39
  integrity sha512-8yKQA9cAS6+wGsJpBysmnhlaaxlN42Qizqkw+h2nILSlS+MAG2z4JdO6p+PJrJ+ACvimkmLJL281h157e52psQ==
40
40
 
41
- "@types/k6@^2.0.0":
42
- version "2.0.1"
43
- resolved "https://registry.yarnpkg.com/@types/k6/-/k6-2.0.1.tgz#f651698a3b06cc7a41d742ca784734cb1f355984"
44
- integrity sha512-3lAXtNx1qMwnn+fbE65yP1h9ADJyG6xQaIfGrhasZI2uck8S+gLuCbQl38YkbR5lGeE/NyCiF0FznmElpUgBsA==
41
+ "@types/k6@^2.3.0":
42
+ version "2.3.0"
43
+ resolved "https://registry.yarnpkg.com/@types/k6/-/k6-2.3.0.tgz#6921603cb9216cf3f3b529da44f877f267cd5b13"
44
+ integrity sha512-kEiRQx9MRQZ0vAwWgZUyYvuEc1JC++OZbH9uHVLsSOIKFLwHz8UeIV1EuIlB4Fqn03A4ZM+E624zVsvQPAAp6Q==
45
45
 
46
46
  "@types/node@*", "@types/node@>=10.0.0":
47
47
  version "26.1.1"
@@ -0,0 +1 @@
1
+ __version__ = "0.18.0.dev10"
@@ -0,0 +1,21 @@
1
+ import structlog
2
+
3
+ from langgraph_api.api.mcp._sdk import InstalledSdk
4
+ from langgraph_api.config import MCP_ENABLED
5
+
6
+ __all__ = ["MCP_SERVED", "mcp_routes"]
7
+
8
+ logger = structlog.stdlib.get_logger(__name__)
9
+ SDK = InstalledSdk.find()
10
+ MCP_SERVED = MCP_ENABLED and SDK.is_supported
11
+
12
+ if SDK.is_supported:
13
+ from langgraph_api.api.mcp._routes import mcp_routes
14
+ else:
15
+ mcp_routes = []
16
+ if MCP_ENABLED:
17
+ logger.error(
18
+ "MCP endpoint disabled: the installed MCP SDK is not supported",
19
+ required=str(SDK.required.specifier),
20
+ installed=SDK.installed,
21
+ )
@@ -0,0 +1,6 @@
1
+ import mcp_types as types
2
+ from pydantic import JsonValue
3
+
4
+
5
+ class ToolCallParams(types.CallToolRequestParams):
6
+ context: dict[str, JsonValue] | None = None
@@ -0,0 +1,11 @@
1
+ MAX_ASSISTANTS = 1000
2
+ DEFAULT_PAGE_SIZE = 100
3
+ MAX_PAGE_OFFSET = 2**63 - 1
4
+ MAX_CURSOR_LENGTH = len(str(MAX_PAGE_OFFSET))
5
+
6
+ PAUSED_TOOL_MESSAGE = (
7
+ "This tool paused to ask for human input, and this client can't answer it."
8
+ )
9
+ RUN_FAILED_MESSAGE = "The tool's run failed."
10
+ INVALID_CURSOR_MESSAGE = "Invalid cursor"
11
+ INTERNAL_ERROR_MESSAGE = "Internal server error"
@@ -0,0 +1,35 @@
1
+ from __future__ import annotations
2
+
3
+ from http import HTTPStatus
4
+ from typing import TYPE_CHECKING
5
+
6
+ from starlette.responses import Response
7
+
8
+ from langgraph_api.api.mcp._origins import OriginPolicy
9
+ from langgraph_api.api.mcp._server import serve
10
+ from langgraph_api.config import CORS_SETTINGS
11
+ from langgraph_api.route import ApiRequest, ApiResponse, ApiRoute
12
+
13
+ if TYPE_CHECKING:
14
+ from starlette.types import ASGIApp
15
+
16
+ __all__ = ["mcp_routes"]
17
+
18
+ ORIGIN_POLICY = OriginPolicy.of(CORS_SETTINGS)
19
+
20
+
21
+ async def handle_mcp_endpoint(request: ApiRequest) -> ASGIApp:
22
+ if not ORIGIN_POLICY.allows(request.headers.get("origin")):
23
+ return ApiResponse(
24
+ {"error": "Origin is not allowed"}, status_code=HTTPStatus.FORBIDDEN
25
+ )
26
+ if request.method != "POST":
27
+ return Response(
28
+ status_code=HTTPStatus.METHOD_NOT_ALLOWED, headers={"Allow": "POST"}
29
+ )
30
+ return serve
31
+
32
+
33
+ mcp_routes = [
34
+ ApiRoute("/mcp", handle_mcp_endpoint, methods=["GET", "POST", "DELETE"]),
35
+ ]
@@ -1,6 +1,9 @@
1
1
  import re
2
+ from collections.abc import Iterable
2
3
  from typing import Any
3
4
 
5
+ from mcp.shared.inbound import X_MCP_HEADER_KEY
6
+
4
7
  # MCP tool name constraints per the 2025-11-25 spec.
5
8
  # Valid characters: ASCII letters, digits, underscore, hyphen, dot.
6
9
  # Length: 1-128 characters.
@@ -72,6 +75,46 @@ def simplify_mcp_schema_inplace(schema: dict[str, Any]) -> None:
72
75
  }
73
76
 
74
77
 
78
+ _SUBSCHEMA_KEYWORDS = frozenset(
79
+ {
80
+ "items",
81
+ "contains",
82
+ "unevaluatedItems",
83
+ "additionalProperties",
84
+ "propertyNames",
85
+ "unevaluatedProperties",
86
+ "not",
87
+ "if",
88
+ "then",
89
+ "else",
90
+ "contentSchema",
91
+ }
92
+ )
93
+ _SUBSCHEMA_LIST_KEYWORDS = frozenset({"allOf", "anyOf", "oneOf", "prefixItems"})
94
+ _SUBSCHEMA_MAP_KEYWORDS = frozenset(
95
+ {"properties", "patternProperties", "dependentSchemas", "$defs", "definitions"}
96
+ )
97
+
98
+
99
+ def drop_mcp_param_headers_inplace(schema: object) -> None:
100
+ if not isinstance(schema, dict):
101
+ return
102
+ schema.pop(X_MCP_HEADER_KEY, None)
103
+ for keyword, value in schema.items():
104
+ for subschema in _subschemas(keyword, value):
105
+ drop_mcp_param_headers_inplace(subschema)
106
+
107
+
108
+ def _subschemas(keyword: object, value: object) -> Iterable[object]:
109
+ if keyword in _SUBSCHEMA_KEYWORDS:
110
+ return (value,)
111
+ if keyword in _SUBSCHEMA_LIST_KEYWORDS and isinstance(value, list):
112
+ return value
113
+ if keyword in _SUBSCHEMA_MAP_KEYWORDS and isinstance(value, dict):
114
+ return value.values()
115
+ return ()
116
+
117
+
75
118
  def normalize_name(name: str) -> str:
76
119
  """Convert an assistant name to a valid MCP tool name.
77
120
 
@@ -0,0 +1,40 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from importlib.metadata import PackageNotFoundError, requires, version
5
+
6
+ from packaging.requirements import Requirement
7
+
8
+ SERVER_DISTRIBUTION = "langgraph-api"
9
+ SDK_DISTRIBUTION = "mcp"
10
+
11
+
12
+ @dataclass(frozen=True, slots=True)
13
+ class InstalledSdk:
14
+ required: Requirement
15
+ installed: str | None
16
+
17
+ @classmethod
18
+ def find(cls) -> InstalledSdk:
19
+ return cls(_declared_requirement(), _installed_version())
20
+
21
+ @property
22
+ def is_supported(self) -> bool:
23
+ return self.installed is not None and self.required.specifier.contains(
24
+ self.installed, prereleases=True
25
+ )
26
+
27
+
28
+ def _declared_requirement() -> Requirement:
29
+ return next(
30
+ requirement
31
+ for requirement in map(Requirement, requires(SERVER_DISTRIBUTION) or ())
32
+ if requirement.name == SDK_DISTRIBUTION
33
+ )
34
+
35
+
36
+ def _installed_version() -> str | None:
37
+ try:
38
+ return version(SDK_DISTRIBUTION)
39
+ except PackageNotFoundError:
40
+ return None
@@ -0,0 +1,66 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from mcp.server.caching import CacheHint
6
+ from mcp.server.lowlevel import Server
7
+ from mcp.server.streamable_http_manager import StreamableHTTPSessionManager
8
+
9
+ from langgraph_api import __version__
10
+ from langgraph_api.api.mcp._calls import ToolCallParams
11
+ from langgraph_api.api.mcp._tools import AssistantTools
12
+ from langgraph_api.config import HTTP_MAX_REQUEST_BODY_BYTES
13
+
14
+ if TYPE_CHECKING:
15
+ import mcp_types as types
16
+ from mcp.server.context import ServerRequestContext
17
+ from starlette.types import Receive, Scope, Send
18
+
19
+ UNCACHED = CacheHint(ttl_ms=0, scope="private")
20
+ HTTP_WHITESPACE = b" \t"
21
+
22
+
23
+ async def _list_tools(
24
+ ctx: ServerRequestContext, params: types.PaginatedRequestParams | None
25
+ ) -> types.ListToolsResult:
26
+ return await AssistantTools.of(ctx).list(params.cursor if params else None)
27
+
28
+
29
+ async def _call_tool(
30
+ ctx: ServerRequestContext, params: ToolCallParams
31
+ ) -> types.CallToolResult:
32
+ return await AssistantTools.of(ctx).call(params)
33
+
34
+
35
+ def _tools_declare_no_param_headers(_tool_name: str) -> None:
36
+ return None
37
+
38
+
39
+ SERVER = Server(
40
+ "LangGraph",
41
+ version=__version__,
42
+ cache_hints={"server/discover": UNCACHED, "tools/list": UNCACHED},
43
+ get_tool_input_schema=_tools_declare_no_param_headers,
44
+ on_list_tools=_list_tools,
45
+ )
46
+ SERVER.add_request_handler("tools/call", ToolCallParams, _call_tool)
47
+
48
+
49
+ async def serve(scope: Scope, receive: Receive, send: Send) -> None:
50
+ manager = StreamableHTTPSessionManager(
51
+ SERVER,
52
+ stateless=True,
53
+ json_response=True,
54
+ max_request_body_size=HTTP_MAX_REQUEST_BODY_BYTES,
55
+ )
56
+ async with manager.run():
57
+ await manager.handle_request(_with_trimmed_headers(scope), receive, send)
58
+
59
+
60
+ def _with_trimmed_headers(scope: Scope) -> Scope:
61
+ return {
62
+ **scope,
63
+ "headers": [
64
+ (name, value.strip(HTTP_WHITESPACE)) for name, value in scope["headers"]
65
+ ],
66
+ }
@@ -0,0 +1,219 @@
1
+ from __future__ import annotations
2
+
3
+ import asyncio
4
+ import contextlib
5
+ import functools
6
+ import re
7
+ from dataclasses import dataclass
8
+ from typing import TYPE_CHECKING, assert_never
9
+
10
+ import httpx
11
+ import mcp_types as types
12
+ import structlog
13
+ from langgraph_sdk.client import LangGraphClient, get_client
14
+ from mcp.shared.exceptions import MCPError
15
+ from starlette.requests import Request
16
+
17
+ from langgraph_api.api.mcp import _sanitizers
18
+ from langgraph_api.api.mcp._constants import (
19
+ DEFAULT_PAGE_SIZE,
20
+ INTERNAL_ERROR_MESSAGE,
21
+ INVALID_CURSOR_MESSAGE,
22
+ MAX_ASSISTANTS,
23
+ MAX_CURSOR_LENGTH,
24
+ MAX_PAGE_OFFSET,
25
+ PAUSED_TOOL_MESSAGE,
26
+ )
27
+ from langgraph_api.api.mcp._outcome import (
28
+ Completed,
29
+ Failed,
30
+ Paused,
31
+ RunOutcome,
32
+ parse_outcome,
33
+ )
34
+ from langgraph_api.serde import json_dumpb
35
+
36
+ if TYPE_CHECKING:
37
+ from collections.abc import AsyncIterator, Iterable, Mapping
38
+
39
+ from langgraph_sdk.schema import Assistant
40
+ from mcp.server.context import ServerRequestContext
41
+
42
+ from langgraph_api.api.mcp._calls import ToolCallParams
43
+
44
+ logger = structlog.stdlib.get_logger(__name__)
45
+
46
+ _CURSOR_DIGITS = re.compile(rf"[0-9]{{1,{MAX_CURSOR_LENGTH}}}")
47
+ _ANNOTATIONS = types.ToolAnnotations(
48
+ read_only_hint=False,
49
+ destructive_hint=False,
50
+ idempotent_hint=False,
51
+ open_world_hint=True,
52
+ )
53
+
54
+
55
+ @functools.lru_cache(maxsize=1)
56
+ def _client() -> LangGraphClient:
57
+ return get_client(url=None)
58
+
59
+
60
+ @contextlib.asynccontextmanager
61
+ async def _failures_as_mcp_errors() -> AsyncIterator[None]:
62
+ try:
63
+ yield
64
+ except MCPError:
65
+ raise
66
+ except Exception as error:
67
+ mcp_error = _mcp_error(error)
68
+ if mcp_error.code == types.INTERNAL_ERROR:
69
+ await logger.aexception("MCP tool request failed")
70
+ raise mcp_error from error
71
+
72
+
73
+ def _mcp_error(error: Exception) -> MCPError:
74
+ match error:
75
+ case httpx.HTTPStatusError(response=response) if response.is_client_error:
76
+ return MCPError(types.INVALID_PARAMS, _detail(response))
77
+ case _:
78
+ return MCPError(types.INTERNAL_ERROR, INTERNAL_ERROR_MESSAGE)
79
+
80
+
81
+ def _detail(response: httpx.Response) -> str:
82
+ with contextlib.suppress(ValueError):
83
+ match response.json():
84
+ case {"detail": str() as detail} if detail:
85
+ return detail
86
+ return response.reason_phrase
87
+
88
+
89
+ @dataclass(frozen=True, slots=True)
90
+ class AssistantTools:
91
+ client: LangGraphClient
92
+ headers: Mapping[str, str]
93
+
94
+ @classmethod
95
+ def of(cls, ctx: ServerRequestContext) -> AssistantTools:
96
+ if not isinstance(ctx.request, Request):
97
+ raise TypeError("Assistant tools are served over HTTP only")
98
+ return cls(_client(), ctx.request.headers)
99
+
100
+ @_failures_as_mcp_errors()
101
+ async def list(self, cursor: str | None) -> types.ListToolsResult:
102
+ offset = _page_offset(cursor)
103
+ assistants = await self.client.assistants.search(
104
+ offset=offset, limit=DEFAULT_PAGE_SIZE, headers=self.headers
105
+ )
106
+ named = await _first_per_name(assistants)
107
+ tools = await asyncio.gather(
108
+ *(self._tool(assistant, name) for name, assistant in named.items())
109
+ )
110
+ return types.ListToolsResult(
111
+ tools=[tool for tool in tools if tool is not None],
112
+ next_cursor=str(offset + DEFAULT_PAGE_SIZE)
113
+ if len(assistants) == DEFAULT_PAGE_SIZE
114
+ else None,
115
+ )
116
+
117
+ @_failures_as_mcp_errors()
118
+ async def call(self, params: ToolCallParams) -> types.CallToolResult:
119
+ value = await self.client.runs.wait(
120
+ thread_id=None,
121
+ assistant_id=await self._assistant_serving(params.name),
122
+ input=params.arguments or {},
123
+ context=params.context,
124
+ headers=self.headers,
125
+ raise_error=False,
126
+ )
127
+ return _tool_result(parse_outcome(value))
128
+
129
+ async def _tool(self, assistant: Assistant, name: str) -> types.Tool | None:
130
+ try:
131
+ schemas = await self.client.assistants.get_schemas(
132
+ assistant["assistant_id"], headers=self.headers
133
+ )
134
+ input_schema = schemas.get("input_schema", {})
135
+ if input_schema is None:
136
+ raise ValueError("Input schema generation failed")
137
+ if input_schema:
138
+ _sanitizers.simplify_mcp_schema_inplace(input_schema)
139
+ _sanitizers.drop_mcp_param_headers_inplace(input_schema)
140
+ input_schema.setdefault("type", "object")
141
+ return types.Tool(
142
+ name=name,
143
+ title=assistant["name"],
144
+ description=assistant.get("description")
145
+ or f"Tool based on the {assistant['name']} assistant",
146
+ input_schema=input_schema,
147
+ annotations=_ANNOTATIONS,
148
+ )
149
+ except Exception as e:
150
+ await logger.awarning(
151
+ "Failed to get schema for assistant, skipping from MCP tools list",
152
+ assistant_id=assistant["assistant_id"],
153
+ assistant_name=assistant["name"],
154
+ error=str(e),
155
+ )
156
+ return None
157
+
158
+ async def _assistant_serving(self, tool_name: str) -> str:
159
+ assistants = await self.client.assistants.search(
160
+ limit=MAX_ASSISTANTS, headers=self.headers
161
+ )
162
+ match [
163
+ assistant["assistant_id"]
164
+ for assistant in assistants
165
+ if _sanitizers.normalize_name(assistant["name"]) == tool_name
166
+ ]:
167
+ case [assistant_id]:
168
+ return assistant_id
169
+ case []:
170
+ raise MCPError(types.INVALID_PARAMS, f"Unknown tool: {tool_name}")
171
+ case _:
172
+ raise MCPError(
173
+ types.INVALID_PARAMS, "Multiple tools found with the same name."
174
+ )
175
+
176
+
177
+ async def _first_per_name(assistants: Iterable[Assistant]) -> dict[str, Assistant]:
178
+ named: dict[str, Assistant] = {}
179
+ for assistant in assistants:
180
+ name = _sanitizers.normalize_name(assistant["name"])
181
+ if name in named:
182
+ await logger.awarning(
183
+ f"Duplicate assistant name found {assistant['name']}",
184
+ name=assistant["name"],
185
+ normalized=name,
186
+ )
187
+ else:
188
+ named[name] = assistant
189
+ return named
190
+
191
+
192
+ def _page_offset(cursor: str | None) -> int:
193
+ if cursor is None:
194
+ return 0
195
+ if not _CURSOR_DIGITS.fullmatch(cursor) or int(cursor) > MAX_PAGE_OFFSET:
196
+ raise MCPError(types.INVALID_PARAMS, INVALID_CURSOR_MESSAGE)
197
+ return int(cursor)
198
+
199
+
200
+ def _tool_result(outcome: RunOutcome) -> types.CallToolResult:
201
+ match outcome:
202
+ case Completed(output=output):
203
+ return types.CallToolResult(content=[_text(json_dumpb(output).decode())])
204
+ case Failed(message=message):
205
+ return types.CallToolResult(content=[_text(message)], is_error=True)
206
+ case Paused(interrupts=interrupts):
207
+ return types.CallToolResult(
208
+ content=[
209
+ _text(PAUSED_TOOL_MESSAGE),
210
+ _text(json_dumpb(interrupts).decode()),
211
+ ],
212
+ is_error=True,
213
+ )
214
+ case _:
215
+ assert_never(outcome)
216
+
217
+
218
+ def _text(text: str) -> types.TextContent:
219
+ return types.TextContent(type="text", text=text)
@@ -4,6 +4,7 @@ from prometheus_client import CONTENT_TYPE_LATEST, generate_latest
4
4
  from starlette.responses import JSONResponse, PlainTextResponse
5
5
 
6
6
  from langgraph_api import __version__, config, metadata
7
+ from langgraph_api.api.mcp import MCP_SERVED
7
8
  from langgraph_api.feature_flags import IS_POSTGRES_OR_GRPC_BACKEND
8
9
  from langgraph_api.http_metrics import HTTP_METRICS_COLLECTOR
9
10
  from langgraph_api.route import ApiRequest
@@ -80,6 +81,7 @@ async def meta_info(request: ApiRequest):
80
81
  and bool(config.TRACING),
81
82
  "langsmith_tracing_replicas": True,
82
83
  "langsmith_tracing_session_on_runs": True,
84
+ "mcp": MCP_SERVED,
83
85
  },
84
86
  "host": {
85
87
  "kind": metadata.HOST,
@@ -6,6 +6,7 @@ from functools import lru_cache
6
6
  import orjson
7
7
 
8
8
  from langgraph_api import config
9
+ from langgraph_api.api.mcp import MCP_SERVED
9
10
  from langgraph_api.graph import GRAPHS
10
11
  from langgraph_api.metadata import USER_API_URL
11
12
  from langgraph_api.validation import openapi
@@ -107,10 +108,8 @@ def get_openapi_spec() -> bytes:
107
108
  elif config.MOUNT_PREFIX:
108
109
  final["servers"] = [{"url": config.MOUNT_PREFIX}]
109
110
 
110
- if not config.MCP_ENABLED:
111
- # Remove the MCP paths from the OpenAPI spec
111
+ if not MCP_SERVED:
112
112
  final["paths"].pop("/mcp/", None)
113
- # Remove the MCP tag definition
114
113
  final["tags"] = [t for t in final.get("tags", []) if t.get("name") != "MCP"]
115
114
 
116
115
  if not config.A2A_ENABLED: