@mapbox/mcp-server 0.8.2 → 0.9.0

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 (177) hide show
  1. package/README.md +65 -12
  2. package/dist/commonjs/index.js +98 -7
  3. package/dist/commonjs/index.js.map +1 -1
  4. package/dist/commonjs/prompts/SearchAlongRoutePrompt.d.ts +26 -0
  5. package/dist/commonjs/prompts/SearchAlongRoutePrompt.d.ts.map +1 -0
  6. package/dist/commonjs/prompts/SearchAlongRoutePrompt.js +164 -0
  7. package/dist/commonjs/prompts/SearchAlongRoutePrompt.js.map +1 -0
  8. package/dist/commonjs/prompts/index.d.ts +41 -0
  9. package/dist/commonjs/prompts/index.d.ts.map +1 -0
  10. package/dist/commonjs/prompts/index.js +56 -0
  11. package/dist/commonjs/prompts/index.js.map +1 -0
  12. package/dist/commonjs/prompts/promptRegistry.d.ts +2 -1
  13. package/dist/commonjs/prompts/promptRegistry.d.ts.map +1 -1
  14. package/dist/commonjs/prompts/promptRegistry.js +2 -0
  15. package/dist/commonjs/prompts/promptRegistry.js.map +1 -1
  16. package/dist/commonjs/resources/index.d.ts +6 -0
  17. package/dist/commonjs/resources/index.d.ts.map +1 -0
  18. package/dist/commonjs/resources/index.js +43 -0
  19. package/dist/commonjs/resources/index.js.map +1 -0
  20. package/dist/commonjs/resources/resourceRegistry.d.ts +3 -1
  21. package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -1
  22. package/dist/commonjs/resources/resourceRegistry.js +5 -1
  23. package/dist/commonjs/resources/resourceRegistry.js.map +1 -1
  24. package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts +13 -0
  25. package/dist/commonjs/resources/temporary/TemporaryDataResource.d.ts.map +1 -0
  26. package/dist/commonjs/resources/temporary/TemporaryDataResource.js +41 -0
  27. package/dist/commonjs/resources/temporary/TemporaryDataResource.js.map +1 -0
  28. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts +15 -0
  29. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.d.ts.map +1 -0
  30. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js +262 -0
  31. package/dist/commonjs/resources/ui-apps/StaticMapUIResource.js.map +1 -0
  32. package/dist/commonjs/tools/BaseTool.d.ts +10 -0
  33. package/dist/commonjs/tools/BaseTool.d.ts.map +1 -1
  34. package/dist/commonjs/tools/BaseTool.js +9 -4
  35. package/dist/commonjs/tools/BaseTool.js.map +1 -1
  36. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
  37. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.input.schema.d.ts +2 -2
  38. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js +4 -0
  39. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.js.map +1 -1
  40. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.d.ts +17846 -2030
  41. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.d.ts.map +1 -1
  42. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.js +73 -38
  43. package/dist/commonjs/tools/category-search-tool/CategorySearchTool.output.schema.js.map +1 -1
  44. package/dist/commonjs/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  45. package/dist/commonjs/tools/directions-tool/DirectionsTool.js +59 -2
  46. package/dist/commonjs/tools/directions-tool/DirectionsTool.js.map +1 -1
  47. package/dist/commonjs/tools/directions-tool/DirectionsTool.output.schema.d.ts +32 -32
  48. package/dist/commonjs/tools/index.d.ts +86 -0
  49. package/dist/commonjs/tools/index.d.ts.map +1 -0
  50. package/dist/commonjs/tools/index.js +146 -0
  51. package/dist/commonjs/tools/index.js.map +1 -0
  52. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts +25 -0
  53. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -0
  54. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts +25 -0
  55. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts.map +1 -0
  56. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js +30 -0
  57. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -0
  58. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js +193 -0
  59. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.js.map +1 -0
  60. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +296 -0
  61. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -0
  62. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js +55 -0
  63. package/dist/commonjs/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -0
  64. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.input.schema.d.ts +4 -4
  65. package/dist/commonjs/tools/reverse-geocode-tool/ReverseGeocodeTool.output.schema.d.ts +350 -350
  66. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  67. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts +4 -4
  68. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -0
  69. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  70. package/dist/commonjs/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts +186 -186
  71. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts +9 -0
  72. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  73. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +12 -12
  74. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js +18 -30
  75. package/dist/commonjs/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  76. package/dist/commonjs/tools/toolRegistry.d.ts +52 -1
  77. package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -1
  78. package/dist/commonjs/tools/toolRegistry.js +70 -5
  79. package/dist/commonjs/tools/toolRegistry.js.map +1 -1
  80. package/dist/commonjs/utils/index.d.ts +33 -0
  81. package/dist/commonjs/utils/index.d.ts.map +1 -0
  82. package/dist/commonjs/utils/index.js +45 -0
  83. package/dist/commonjs/utils/index.js.map +1 -0
  84. package/dist/commonjs/utils/temporaryResourceManager.d.ts +51 -0
  85. package/dist/commonjs/utils/temporaryResourceManager.d.ts.map +1 -0
  86. package/dist/commonjs/utils/temporaryResourceManager.js +92 -0
  87. package/dist/commonjs/utils/temporaryResourceManager.js.map +1 -0
  88. package/dist/commonjs/version.json +3 -3
  89. package/dist/esm/index.js +99 -8
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/prompts/SearchAlongRoutePrompt.d.ts +26 -0
  92. package/dist/esm/prompts/SearchAlongRoutePrompt.d.ts.map +1 -0
  93. package/dist/esm/prompts/SearchAlongRoutePrompt.js +160 -0
  94. package/dist/esm/prompts/SearchAlongRoutePrompt.js.map +1 -0
  95. package/dist/esm/prompts/index.d.ts +41 -0
  96. package/dist/esm/prompts/index.d.ts.map +1 -0
  97. package/dist/esm/prompts/index.js +47 -0
  98. package/dist/esm/prompts/index.js.map +1 -0
  99. package/dist/esm/prompts/promptRegistry.d.ts +2 -1
  100. package/dist/esm/prompts/promptRegistry.d.ts.map +1 -1
  101. package/dist/esm/prompts/promptRegistry.js +2 -0
  102. package/dist/esm/prompts/promptRegistry.js.map +1 -1
  103. package/dist/esm/resources/index.d.ts +6 -0
  104. package/dist/esm/resources/index.d.ts.map +1 -0
  105. package/dist/esm/resources/index.js +37 -0
  106. package/dist/esm/resources/index.js.map +1 -0
  107. package/dist/esm/resources/resourceRegistry.d.ts +3 -1
  108. package/dist/esm/resources/resourceRegistry.d.ts.map +1 -1
  109. package/dist/esm/resources/resourceRegistry.js +5 -1
  110. package/dist/esm/resources/resourceRegistry.js.map +1 -1
  111. package/dist/esm/resources/temporary/TemporaryDataResource.d.ts +13 -0
  112. package/dist/esm/resources/temporary/TemporaryDataResource.d.ts.map +1 -0
  113. package/dist/esm/resources/temporary/TemporaryDataResource.js +37 -0
  114. package/dist/esm/resources/temporary/TemporaryDataResource.js.map +1 -0
  115. package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts +15 -0
  116. package/dist/esm/resources/ui-apps/StaticMapUIResource.d.ts.map +1 -0
  117. package/dist/esm/resources/ui-apps/StaticMapUIResource.js +258 -0
  118. package/dist/esm/resources/ui-apps/StaticMapUIResource.js.map +1 -0
  119. package/dist/esm/tools/BaseTool.d.ts +10 -0
  120. package/dist/esm/tools/BaseTool.d.ts.map +1 -1
  121. package/dist/esm/tools/BaseTool.js +9 -4
  122. package/dist/esm/tools/BaseTool.js.map +1 -1
  123. package/dist/esm/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
  124. package/dist/esm/tools/category-search-tool/CategorySearchTool.input.schema.d.ts +2 -2
  125. package/dist/esm/tools/category-search-tool/CategorySearchTool.js +4 -0
  126. package/dist/esm/tools/category-search-tool/CategorySearchTool.js.map +1 -1
  127. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.d.ts +17846 -2030
  128. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.d.ts.map +1 -1
  129. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.js +73 -38
  130. package/dist/esm/tools/category-search-tool/CategorySearchTool.output.schema.js.map +1 -1
  131. package/dist/esm/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
  132. package/dist/esm/tools/directions-tool/DirectionsTool.js +59 -2
  133. package/dist/esm/tools/directions-tool/DirectionsTool.js.map +1 -1
  134. package/dist/esm/tools/directions-tool/DirectionsTool.output.schema.d.ts +32 -32
  135. package/dist/esm/tools/index.d.ts +86 -0
  136. package/dist/esm/tools/index.d.ts.map +1 -0
  137. package/dist/esm/tools/index.js +118 -0
  138. package/dist/esm/tools/index.js.map +1 -0
  139. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts +25 -0
  140. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.d.ts.map +1 -0
  141. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts +25 -0
  142. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.d.ts.map +1 -0
  143. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js +24 -0
  144. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.input.schema.js.map +1 -0
  145. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js +189 -0
  146. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.js.map +1 -0
  147. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts +296 -0
  148. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.d.ts.map +1 -0
  149. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js +52 -0
  150. package/dist/esm/tools/place-details-tool/PlaceDetailsTool.output.schema.js.map +1 -0
  151. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.input.schema.d.ts +4 -4
  152. package/dist/esm/tools/reverse-geocode-tool/ReverseGeocodeTool.output.schema.d.ts +350 -350
  153. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.d.ts.map +1 -1
  154. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.input.schema.d.ts +4 -4
  155. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js +4 -0
  156. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.js.map +1 -1
  157. package/dist/esm/tools/search-and-geocode-tool/SearchAndGeocodeTool.output.schema.d.ts +186 -186
  158. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts +9 -0
  159. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
  160. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.input.schema.d.ts +12 -12
  161. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js +18 -30
  162. package/dist/esm/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
  163. package/dist/esm/tools/toolRegistry.d.ts +52 -1
  164. package/dist/esm/tools/toolRegistry.d.ts.map +1 -1
  165. package/dist/esm/tools/toolRegistry.js +66 -4
  166. package/dist/esm/tools/toolRegistry.js.map +1 -1
  167. package/dist/esm/utils/index.d.ts +33 -0
  168. package/dist/esm/utils/index.d.ts.map +1 -0
  169. package/dist/esm/utils/index.js +36 -0
  170. package/dist/esm/utils/index.js.map +1 -0
  171. package/dist/esm/utils/temporaryResourceManager.d.ts +51 -0
  172. package/dist/esm/utils/temporaryResourceManager.d.ts.map +1 -0
  173. package/dist/esm/utils/temporaryResourceManager.js +88 -0
  174. package/dist/esm/utils/temporaryResourceManager.js.map +1 -0
  175. package/dist/esm/version.json +3 -3
  176. package/package.json +54 -8
  177. /package/patches/{@modelcontextprotocol+sdk+1.25.2.patch → @modelcontextprotocol+sdk+1.26.0.patch} +0 -0
package/README.md CHANGED
@@ -51,6 +51,7 @@ For detailed setup instructions for different integrations, refer to the followi
51
51
  - [VS Code Setup](./docs/vscode-setup.md) - Setting up a development environment in Visual Studio Code
52
52
  - [Cursor AI IDE Setup](./docs/cursor-setup.md) - Setting up a development environment in Cursor AI IDE
53
53
  - [Smolagents Integration](./docs/using-mcp-with-smolagents/README.md) - Example showing how to connect Smolagents AI agents to Mapbox's tools
54
+ - **[Importing Tools Directly](./docs/importing-tools.md)** - Use Mapbox tools in your own applications without running the MCP server
54
55
 
55
56
  ## Example Prompts
56
57
 
@@ -59,6 +60,7 @@ Try these prompts with Claude Desktop or other MCP clients after setup:
59
60
  ### Location Discovery
60
61
 
61
62
  - "Find coffee shops within walking distance of the Empire State Building"
63
+ - "I want to go from Seattle to Portland, is there a Starbucks along the way?"
62
64
  - "Show me gas stations along the route from Boston to New York"
63
65
  - "What restaurants are near Times Square?"
64
66
 
@@ -106,6 +108,8 @@ Try these prompts with Claude Desktop or other MCP clients after setup:
106
108
  - Include time constraints when relevant ("during rush hour", "at 3 PM")
107
109
  - Ask for specific output formats when needed ("as a map image", "in JSON format")
108
110
 
111
+ > **Detailed examples:** See [examples/search-along-route.md](./examples/search-along-route.md) for comprehensive examples of the search-along-route prompt with different use cases and MCP Inspector testing instructions.
112
+
109
113
  ## Resources
110
114
 
111
115
  The MCP server exposes static reference data as **MCP resources**. Resources provide read-only access to data that clients can reference directly without making tool calls.
@@ -129,25 +133,27 @@ Access the complete list of available category IDs for use with the category sea
129
133
  - **Clients with native MCP resource support**: Use the `resources/read` MCP protocol method
130
134
  - **Clients without resource support**: Use the `resource_reader_tool` with the resource URI
131
135
 
132
- ## MCP-UI Support
136
+ ## Rich Map Previews (MCP Apps & MCP-UI)
137
+
138
+ The `static_map_image_tool` provides an interactive map preview panel in compatible clients, in addition to the base64 image that all clients receive.
133
139
 
134
- This MCP server supports **MCP-UI**, an open specification that allows compatible clients to render interactive UI elements like embedded iframes. This provides a richer visual experience while maintaining full backwards compatibility with clients that don't support MCP-UI.
140
+ ### MCP Apps
135
141
 
136
- ### What is MCP-UI?
142
+ This server implements the **MCP Apps** protocol (`@modelcontextprotocol/ext-apps`), which renders a self-contained HTML app panel directly inside the chat. Supported clients show an interactive map with a Fullscreen toggle:
137
143
 
138
- MCP-UI enables tools to return interactive UI resources alongside their standard output. Compatible clients can render these as embedded iframes, while clients without MCP-UI support simply ignore them and use the standard output.
144
+ - **Claude Desktop**
145
+ - **VS Code with GitHub Copilot** ✅
146
+ - **Claude Code** ✅
139
147
 
140
- ### Supported Tools
148
+ ### MCP-UI
141
149
 
142
- - **Static Map Image Tool**: Returns both image data and an embeddable iframe URL for inline map visualization
150
+ This server also supports **MCP-UI** (`@mcp-ui/server`), an earlier open specification for embedded iframe previews:
143
151
 
144
- ### Benefits
152
+ - **[Goose](https://github.com/block/goose)** ✅
145
153
 
146
- - **Enhanced Experience**: Compatible clients (e.g., Goose) can display maps inline without leaving the chat
147
- - **Backwards Compatible**: Non-supporting clients (e.g., Claude Desktop) continue working unchanged
148
- - **No Configuration Required**: MCP-UI is enabled by default
154
+ ### Backwards Compatibility
149
155
 
150
- ### Configuration
156
+ All clients receive the base64-encoded map image regardless of protocol support — interactive previews are a progressive enhancement on top of the standard image response.
151
157
 
152
158
  MCP-UI is **enabled by default**. To disable it:
153
159
 
@@ -179,7 +185,30 @@ node dist/esm/index.js --disable-mcp-ui
179
185
  }
180
186
  ```
181
187
 
182
- **For more detailed information**, including compatible clients, technical implementation details, and troubleshooting, see the [MCP-UI documentation](./docs/mcp-ui.md).
188
+ **For more detailed information**, including technical implementation details and troubleshooting, see the [MCP-UI documentation](./docs/mcp-ui.md).
189
+
190
+ #### CLIENT_NEEDS_RESOURCE_FALLBACK
191
+
192
+ **Resource Fallback Tools (Opt-In for Non-Compliant Clients)**
193
+
194
+ Resources are a core MCP feature supported by most clients (Claude Desktop, VS Code, MCP Inspector, etc.). However, some clients (like smolagents) don't support resources at all. For these clients, the server can provide "resource fallback tools" that deliver the same content as resources but via tool calls.
195
+
196
+ **Fallback Tools:**
197
+
198
+ - `resource_reader_tool` - Generic fallback for reading any resource by URI
199
+ - `category_list_tool` - Provides access to category list (mapbox://categories)
200
+
201
+ **By default, these tools are NOT included** (assumes your client supports resources). If your client doesn't support resources, enable the fallback tools:
202
+
203
+ ```bash
204
+ export CLIENT_NEEDS_RESOURCE_FALLBACK=true
205
+ ```
206
+
207
+ **When to set this:**
208
+
209
+ - ✅ Set to `true` if using smolagents or other clients without resource support
210
+ - ❌ Leave unset (default) if using Claude Desktop, VS Code, MCP Inspector, or any resource-capable client
211
+ - ❌ Leave unset if unsure (most clients support resources)
183
212
 
184
213
  ## Tools
185
214
 
@@ -453,6 +482,30 @@ npx plop create-tool
453
482
  # provide tool name without suffix (e.g. Search)
454
483
  ```
455
484
 
485
+ ## Releasing a New Version
486
+
487
+ ```sh
488
+ # 1. Bump version in package.json
489
+ npm version <new-version> --no-git-tag-version
490
+
491
+ # 2. Sync version to manifest.json and server.json
492
+ npm run sync-manifest
493
+
494
+ # 3. Prepare CHANGELOG (replaces "Unreleased" with version and date)
495
+ npm run changelog:prepare-release <new-version>
496
+
497
+ # 4. Update package-lock.json
498
+ npm install
499
+
500
+ # 5. Review changes, then commit and tag
501
+ git add package.json package-lock.json manifest.json server.json CHANGELOG.md
502
+ git commit -m "Release v<new-version>"
503
+ git tag v<new-version>
504
+ git push && git push --tags
505
+ ```
506
+
507
+ **Important**: The publisher workflow validates that `package.json` and `server.json` versions match the release version. Skipping the version bump or manifest sync will cause publish failures.
508
+
456
509
  ## OpenTelemetry Tracing
457
510
 
458
511
  This MCP server includes comprehensive OpenTelemetry tracing for production observability:
@@ -12,6 +12,7 @@ const node_fs_2 = require("node:fs");
12
12
  const api_1 = require("@opentelemetry/api");
13
13
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
14
14
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
15
+ const server_1 = require("@modelcontextprotocol/ext-apps/server");
15
16
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
16
17
  const toolConfig_js_1 = require("./config/toolConfig.js");
17
18
  const toolRegistry_js_1 = require("./tools/toolRegistry.js");
@@ -44,8 +45,13 @@ const versionInfo = (0, versionUtils_js_1.getVersionInfo)();
44
45
  // Parse configuration from command-line arguments
45
46
  const config = (0, toolConfig_js_1.parseToolConfigFromArgs)();
46
47
  // Get and filter tools based on configuration
47
- const allTools = (0, toolRegistry_js_1.getAllTools)();
48
- const enabledTools = (0, toolConfig_js_1.filterTools)(allTools, config);
48
+ // Split into categories for capability-aware registration
49
+ const coreTools = (0, toolRegistry_js_1.getCoreTools)();
50
+ const elicitationTools = (0, toolRegistry_js_1.getElicitationTools)();
51
+ const resourceFallbackTools = (0, toolRegistry_js_1.getResourceFallbackTools)();
52
+ const enabledCoreTools = (0, toolConfig_js_1.filterTools)(coreTools, config);
53
+ const enabledElicitationTools = (0, toolConfig_js_1.filterTools)(elicitationTools, config);
54
+ const enabledResourceFallbackTools = (0, toolConfig_js_1.filterTools)(resourceFallbackTools, config);
49
55
  // Get all resources
50
56
  const allResources = (0, resourceRegistry_js_1.getAllResources)();
51
57
  // Create an MCP server
@@ -68,17 +74,36 @@ const server = new mcp_js_1.McpServer({
68
74
  ]
69
75
  }, {
70
76
  capabilities: {
71
- tools: {},
77
+ tools: {
78
+ listChanged: true // Advertise support for dynamic tool registration (ready for future capability-dependent tools)
79
+ },
72
80
  resources: {},
73
81
  prompts: {}
74
82
  }
75
83
  });
76
- // Register enabled tools to the server
77
- enabledTools.forEach((tool) => {
84
+ // Register only core tools before connection
85
+ // Capability-dependent tools will be registered dynamically after connection
86
+ enabledCoreTools.forEach((tool) => {
78
87
  tool.installTo(server);
79
88
  });
80
- // Register all resources to the server
81
- allResources.forEach((resource) => {
89
+ // Separate MCP Apps UI resources from regular resources
90
+ const uiResources = allResources.filter((r) => r.uri.startsWith('ui://'));
91
+ const regularResources = allResources.filter((r) => !r.uri.startsWith('ui://'));
92
+ // Register MCP Apps UI resources using registerAppResource
93
+ // IMPORTANT: Use RESOURCE_MIME_TYPE which is "text/html;profile=mcp-app"
94
+ // This tells clients (like Claude Desktop) that this is an MCP App
95
+ uiResources.forEach((resource) => {
96
+ (0, server_1.registerAppResource)(
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ server, resource.name, resource.uri,
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
+ { mimeType: server_1.RESOURCE_MIME_TYPE, description: resource.description }, async () => {
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ return await resource.read(resource.uri, {});
103
+ });
104
+ });
105
+ // Register regular resources using standard registration
106
+ regularResources.forEach((resource) => {
82
107
  resource.installTo(server);
83
108
  });
84
109
  // Register prompt handlers
@@ -204,6 +229,72 @@ async function main() {
204
229
  // Start receiving messages on stdin and sending messages on stdout
205
230
  const transport = new stdio_js_1.StdioServerTransport();
206
231
  await server.connect(transport);
232
+ // After connection, dynamically register capability-dependent tools
233
+ const clientCapabilities = server.server.getClientCapabilities();
234
+ // Debug: Log what capabilities we detected
235
+ server.server.sendLoggingMessage({
236
+ level: 'info',
237
+ data: `Client capabilities detected: ${JSON.stringify(clientCapabilities, null, 2)}`
238
+ });
239
+ let toolsAdded = false;
240
+ // Register elicitation tools if client supports elicitation
241
+ if (clientCapabilities?.elicitation && enabledElicitationTools.length > 0) {
242
+ server.server.sendLoggingMessage({
243
+ level: 'info',
244
+ data: `Client supports elicitation. Registering ${enabledElicitationTools.length} elicitation-dependent tools`
245
+ });
246
+ enabledElicitationTools.forEach((tool) => {
247
+ tool.installTo(server);
248
+ });
249
+ toolsAdded = true;
250
+ }
251
+ else if (enabledElicitationTools.length > 0) {
252
+ server.server.sendLoggingMessage({
253
+ level: 'debug',
254
+ data: `Client does not support elicitation. Skipping ${enabledElicitationTools.length} elicitation-dependent tools`
255
+ });
256
+ }
257
+ // Register resource fallback tools for clients that don't support resources
258
+ // Note: Resources are a core MCP feature supported by most clients.
259
+ // However, some clients (like smolagents) don't support resources at all.
260
+ // These fallback tools provide the same content as resources but via tool calls instead.
261
+ //
262
+ // Configuration via CLIENT_NEEDS_RESOURCE_FALLBACK environment variable:
263
+ // - unset (default) = Skip fallback tools (assume client supports resources)
264
+ // - "true" = Provide fallback tools (client does NOT support resources)
265
+ const clientNeedsResourceFallback = process.env.CLIENT_NEEDS_RESOURCE_FALLBACK?.toLowerCase() === 'true';
266
+ if (clientNeedsResourceFallback && enabledResourceFallbackTools.length > 0) {
267
+ server.server.sendLoggingMessage({
268
+ level: 'info',
269
+ data: `CLIENT_NEEDS_RESOURCE_FALLBACK=true. Registering ${enabledResourceFallbackTools.length} resource fallback tools`
270
+ });
271
+ enabledResourceFallbackTools.forEach((tool) => {
272
+ tool.installTo(server);
273
+ });
274
+ toolsAdded = true;
275
+ }
276
+ else if (enabledResourceFallbackTools.length > 0) {
277
+ server.server.sendLoggingMessage({
278
+ level: 'debug',
279
+ data: `CLIENT_NEEDS_RESOURCE_FALLBACK not set or false. Skipping ${enabledResourceFallbackTools.length} resource fallback tools (client supports resources)`
280
+ });
281
+ }
282
+ // Notify client about tool list changes if any tools were added
283
+ if (toolsAdded) {
284
+ try {
285
+ server.sendToolListChanged();
286
+ server.server.sendLoggingMessage({
287
+ level: 'debug',
288
+ data: 'Sent notifications/tools/list_changed to client'
289
+ });
290
+ }
291
+ catch (error) {
292
+ server.server.sendLoggingMessage({
293
+ level: 'warning',
294
+ data: `Failed to send tool list change notification: ${error instanceof Error ? error.message : String(error)}`
295
+ });
296
+ }
297
+ }
207
298
  }
208
299
  // Ensure cleanup interval is cleared when the process exits
209
300
  async function shutdown() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { BasePrompt } from './BasePrompt.js';
2
+ import type { PromptArgument, PromptMessage } from '@modelcontextprotocol/sdk/types.js';
3
+ /**
4
+ * Prompt for finding places along a route between two locations.
5
+ *
6
+ * This prompt guides the agent through:
7
+ * 1. Geocoding start and end locations (if needed)
8
+ * 2. Getting the route geometry
9
+ * 3. Creating a buffer corridor around the route
10
+ * 4. Searching for places within that corridor
11
+ * 5. Filtering and ordering results by distance from route
12
+ * 6. Visualizing on a map
13
+ *
14
+ * Example queries:
15
+ * - "I want to go from Seattle to Portland, is there a Starbucks along the way?"
16
+ * - "Find gas stations along my route from LA to San Francisco"
17
+ * - "Show me rest stops between Denver and Salt Lake City"
18
+ * - "What restaurants are along the drive from Boston to NYC?"
19
+ */
20
+ export declare class SearchAlongRoutePrompt extends BasePrompt {
21
+ readonly name = "search-along-route";
22
+ readonly description = "Finds specific types of places along a route between two locations, using buffer analysis and POI search";
23
+ readonly arguments: PromptArgument[];
24
+ getMessages(args: Record<string, string>): PromptMessage[];
25
+ }
26
+ //# sourceMappingURL=SearchAlongRoutePrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchAlongRoutePrompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/SearchAlongRoutePrompt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACd,MAAM,oCAAoC,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,8GACyF;IAE7G,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,CA6BlC;IAEF,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,EAAE;CAkH3D"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ // Copyright (c) Mapbox, Inc.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.SearchAlongRoutePrompt = void 0;
6
+ const BasePrompt_js_1 = require("./BasePrompt.js");
7
+ /**
8
+ * Prompt for finding places along a route between two locations.
9
+ *
10
+ * This prompt guides the agent through:
11
+ * 1. Geocoding start and end locations (if needed)
12
+ * 2. Getting the route geometry
13
+ * 3. Creating a buffer corridor around the route
14
+ * 4. Searching for places within that corridor
15
+ * 5. Filtering and ordering results by distance from route
16
+ * 6. Visualizing on a map
17
+ *
18
+ * Example queries:
19
+ * - "I want to go from Seattle to Portland, is there a Starbucks along the way?"
20
+ * - "Find gas stations along my route from LA to San Francisco"
21
+ * - "Show me rest stops between Denver and Salt Lake City"
22
+ * - "What restaurants are along the drive from Boston to NYC?"
23
+ */
24
+ class SearchAlongRoutePrompt extends BasePrompt_js_1.BasePrompt {
25
+ name = 'search-along-route';
26
+ description = 'Finds specific types of places along a route between two locations, using buffer analysis and POI search';
27
+ arguments = [
28
+ {
29
+ name: 'from',
30
+ description: 'Starting location (address, place name, or coordinates)',
31
+ required: true
32
+ },
33
+ {
34
+ name: 'to',
35
+ description: 'Destination location (address, place name, or coordinates)',
36
+ required: true
37
+ },
38
+ {
39
+ name: 'search_for',
40
+ description: 'Type of place to search for (e.g., "Starbucks", "gas stations", "rest stops", "restaurants")',
41
+ required: true
42
+ },
43
+ {
44
+ name: 'mode',
45
+ description: 'Travel mode: driving, walking, or cycling (default: driving)',
46
+ required: false
47
+ },
48
+ {
49
+ name: 'buffer_meters',
50
+ description: 'Search corridor width on each side of route in meters (default: 1000)',
51
+ required: false
52
+ }
53
+ ];
54
+ getMessages(args) {
55
+ this.validateArguments(args);
56
+ const { from, to, search_for, mode = 'driving'
57
+ // buffer_meters parameter is kept for API compatibility but not used
58
+ // in the simplified proximity-sampling approach
59
+ } = args;
60
+ return [
61
+ {
62
+ role: 'user',
63
+ content: {
64
+ type: 'text',
65
+ text: `Find ${search_for} along the ${mode} route from ${from} to ${to}.
66
+
67
+ Please follow these steps:
68
+
69
+ 1. **Geocode locations** (if needed):
70
+ - Use search_and_geocode_tool to convert ${from} and ${to} to coordinates if they're not already in coordinate format
71
+
72
+ 2. **Get the route**:
73
+ - Use directions_tool with profile=${mode} and geometries="none" to get route metadata (distance, duration)
74
+ - This returns a compact response with route summary WITHOUT large geometry data
75
+ - Note the total route distance to determine sampling strategy
76
+
77
+ 3. **Search along the route using point sampling** (works for all route lengths):
78
+
79
+ **Determine sample strategy based on route length:**
80
+ - SHORT routes (< 50km): Sample 5-7 evenly spaced points between start and end
81
+ - MEDIUM routes (50-150km): Sample 5-7 evenly spaced points between start and end
82
+ - VERY LONG routes (> 150km): Sample 5-7 evenly spaced points (start, end, and middle points)
83
+
84
+ **For each sample point:**
85
+ - Calculate coordinates by interpolating linearly between start and end coordinates
86
+ - Choose the appropriate search tool:
87
+ * If "${search_for}" is a specific place/brand (e.g., "Starbucks", "McDonald's", "Whole Foods"):
88
+ Use search_and_geocode_tool with proximity="lon,lat" and q="${search_for}"
89
+ * If "${search_for}" is a category (e.g., "coffee shops", "gas stations", "restaurants"):
90
+ Use category_search_tool with types="${search_for}" and proximity="lon,lat"
91
+ - Limit results per point (10-20 for short routes, 5-10 for long routes)
92
+
93
+ **IMPORTANT - Execute searches in parallel:**
94
+ - All sample point searches are INDEPENDENT and can run concurrently
95
+ - Make ALL search tool calls in a single message (parallel execution)
96
+ - Example: If you have 5 sample points, make 5 search_and_geocode_tool calls in one turn
97
+ - This dramatically speeds up the workflow vs sequential searches
98
+
99
+ **Combine and deduplicate:**
100
+ - Collect all results from sample points
101
+ - Remove duplicates (same place found from multiple sample points)
102
+ - Calculate distances from start point using distance_tool:
103
+ * These calculations are INDEPENDENT and can run in parallel
104
+ * Make ALL distance_tool calls in a single message for all results
105
+ * Example: If you have 10 unique results, make 10 distance_tool calls in one turn
106
+ - Order results by distance from start (approximate route progress)
107
+
108
+ **Why this approach works:**
109
+ - Simple and reliable - just directions + proximity searches
110
+ - No buffer/bbox/polygon complexity
111
+ - Works consistently for all route lengths
112
+ - Fast execution, no token issues
113
+ - Covers the route corridor naturally through proximity searches
114
+
115
+ 4. **Present results**:
116
+ - Results are already ordered by distance from start
117
+ - Limit to top 15 results if many were found
118
+ - Note: Results are biased to the route corridor through proximity searches at sample points
119
+
120
+ 5. **Present results**:
121
+
122
+ **Skip map generation by default** (static_map_image_tool encoding is slow):
123
+ - Note to user: "Map visualization can be generated separately if needed"
124
+ - The client (Claude Desktop, etc.) may have its own map display capabilities
125
+ - Focus on providing excellent text results instead
126
+
127
+ **Results list (always provide):**
128
+ - Summary: "Found X results along the route from ${from} to ${to}"
129
+ - Route details: Total distance and estimated travel time
130
+ - For each result:
131
+ * Name and address
132
+ * Approximate distance from start (e.g., "45 miles into your trip")
133
+ * Coordinates (so user could map them separately if desired)
134
+ - Total results found
135
+ - Note which sampling strategy was used
136
+
137
+ **If user explicitly asks for a map:**
138
+ - Only then use static_map_image_tool with route and top 8-10 results
139
+ - Warn that encoding may take time for longer routes
140
+
141
+ 6. **Additional context**:
142
+ - Mention the total route distance and estimated travel time
143
+ - Note which sampling strategy was used:
144
+ * Short route: "Searched every 5-10 points along the route for comprehensive coverage"
145
+ * Medium route: "Sampled key points along the route"
146
+ * Very long route: "Sampled major points along the route"
147
+ - If no results were found, suggest trying a different search term or checking a specific segment
148
+ - If many results (>15), show top 15 and mention there are more
149
+
150
+ **Important notes:**
151
+ - This approach uses simple proximity searches at sampled route points
152
+ - No buffer/bbox/polygon operations needed - much more reliable
153
+ - Works consistently for all route lengths
154
+ - Fast and avoids token/timeout issues
155
+ - Results naturally cover the route corridor through proximity biasing
156
+
157
+ Make the output clear, actionable, and well-formatted.`
158
+ }
159
+ }
160
+ ];
161
+ }
162
+ }
163
+ exports.SearchAlongRoutePrompt = SearchAlongRoutePrompt;
164
+ //# sourceMappingURL=SearchAlongRoutePrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchAlongRoutePrompt.js","sourceRoot":"","sources":["../../../src/prompts/SearchAlongRoutePrompt.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAElC,mDAA6C;AAM7C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,sBAAuB,SAAQ,0BAAU;IAC3C,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAClB,0GAA0G,CAAC;IAEpG,SAAS,GAAqB;QACrC;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,8FAA8F;YAChG,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,WAAW,EACT,8DAA8D;YAChE,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,uEAAuE;YACzE,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC;IAEF,WAAW,CAAC,IAA4B;QACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,EACJ,IAAI,EACJ,EAAE,EACF,UAAU,EACV,IAAI,GAAG,SAAS;QAChB,qEAAqE;QACrE,gDAAgD;UACjD,GAAG,IAAI,CAAC;QAET,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ,UAAU,cAAc,IAAI,eAAe,IAAI,OAAO,EAAE;;;;;8CAKlC,IAAI,QAAQ,EAAE;;;wCAGpB,IAAI;;;;;;;;;;;;;;aAc/B,UAAU;qEAC8C,UAAU;aAClE,UAAU;8CACuB,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAsCF,IAAI,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA6BZ;iBAC9C;aACF;SACF,CAAC;IACJ,CAAC;CACF;AAtJD,wDAsJC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @module prompts
3
+ *
4
+ * Public API for Mapbox MCP prompts. This module exports:
5
+ * - Prompt classes for custom instantiation
6
+ * - Pre-configured prompt instances ready to use
7
+ * - Registry functions for batch access
8
+ *
9
+ * @example Simple usage with pre-configured instances
10
+ * ```typescript
11
+ * import { getDirections } from '@mapbox/mcp-server/prompts';
12
+ *
13
+ * // Use directly
14
+ * const result = await getDirections.execute({ ... });
15
+ * ```
16
+ *
17
+ * @example Advanced usage with custom instantiation
18
+ * ```typescript
19
+ * import { GetDirectionsPrompt } from '@mapbox/mcp-server/prompts';
20
+ *
21
+ * const customPrompt = new GetDirectionsPrompt();
22
+ * ```
23
+ */
24
+ export { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
25
+ export { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
26
+ export { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
27
+ export { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
28
+ import { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
29
+ import { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
30
+ import { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
31
+ import { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
32
+ /** Find places near a location */
33
+ export declare const findPlacesNearby: FindPlacesNearbyPrompt;
34
+ /** Get directions between locations */
35
+ export declare const getDirections: GetDirectionsPrompt;
36
+ /** Search for points of interest along a route */
37
+ export declare const searchAlongRoute: SearchAlongRoutePrompt;
38
+ /** Show areas reachable within a time limit */
39
+ export declare const showReachableAreas: ShowReachableAreasPrompt;
40
+ export { getAllPrompts, getPromptByName, type PromptInstance } from './promptRegistry.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prompts/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,wBAA+B,CAAC;AAE7D,uCAAuC;AACvC,eAAO,MAAM,aAAa,qBAA4B,CAAC;AAEvD,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,wBAA+B,CAAC;AAE7D,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,0BAAiC,CAAC;AAGjE,OAAO,EACL,aAAa,EACb,eAAe,EACf,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ // Copyright (c) Mapbox, Inc.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.getPromptByName = exports.getAllPrompts = exports.showReachableAreas = exports.searchAlongRoute = exports.getDirections = exports.findPlacesNearby = exports.ShowReachableAreasPrompt = exports.SearchAlongRoutePrompt = exports.GetDirectionsPrompt = exports.FindPlacesNearbyPrompt = void 0;
6
+ /**
7
+ * @module prompts
8
+ *
9
+ * Public API for Mapbox MCP prompts. This module exports:
10
+ * - Prompt classes for custom instantiation
11
+ * - Pre-configured prompt instances ready to use
12
+ * - Registry functions for batch access
13
+ *
14
+ * @example Simple usage with pre-configured instances
15
+ * ```typescript
16
+ * import { getDirections } from '@mapbox/mcp-server/prompts';
17
+ *
18
+ * // Use directly
19
+ * const result = await getDirections.execute({ ... });
20
+ * ```
21
+ *
22
+ * @example Advanced usage with custom instantiation
23
+ * ```typescript
24
+ * import { GetDirectionsPrompt } from '@mapbox/mcp-server/prompts';
25
+ *
26
+ * const customPrompt = new GetDirectionsPrompt();
27
+ * ```
28
+ */
29
+ // Export all prompt classes
30
+ var FindPlacesNearbyPrompt_js_1 = require("./FindPlacesNearbyPrompt.js");
31
+ Object.defineProperty(exports, "FindPlacesNearbyPrompt", { enumerable: true, get: function () { return FindPlacesNearbyPrompt_js_1.FindPlacesNearbyPrompt; } });
32
+ var GetDirectionsPrompt_js_1 = require("./GetDirectionsPrompt.js");
33
+ Object.defineProperty(exports, "GetDirectionsPrompt", { enumerable: true, get: function () { return GetDirectionsPrompt_js_1.GetDirectionsPrompt; } });
34
+ var SearchAlongRoutePrompt_js_1 = require("./SearchAlongRoutePrompt.js");
35
+ Object.defineProperty(exports, "SearchAlongRoutePrompt", { enumerable: true, get: function () { return SearchAlongRoutePrompt_js_1.SearchAlongRoutePrompt; } });
36
+ var ShowReachableAreasPrompt_js_1 = require("./ShowReachableAreasPrompt.js");
37
+ Object.defineProperty(exports, "ShowReachableAreasPrompt", { enumerable: true, get: function () { return ShowReachableAreasPrompt_js_1.ShowReachableAreasPrompt; } });
38
+ // Import prompt classes for instantiation
39
+ const FindPlacesNearbyPrompt_js_2 = require("./FindPlacesNearbyPrompt.js");
40
+ const GetDirectionsPrompt_js_2 = require("./GetDirectionsPrompt.js");
41
+ const SearchAlongRoutePrompt_js_2 = require("./SearchAlongRoutePrompt.js");
42
+ const ShowReachableAreasPrompt_js_2 = require("./ShowReachableAreasPrompt.js");
43
+ // Export pre-configured prompt instances with short, clean names
44
+ /** Find places near a location */
45
+ exports.findPlacesNearby = new FindPlacesNearbyPrompt_js_2.FindPlacesNearbyPrompt();
46
+ /** Get directions between locations */
47
+ exports.getDirections = new GetDirectionsPrompt_js_2.GetDirectionsPrompt();
48
+ /** Search for points of interest along a route */
49
+ exports.searchAlongRoute = new SearchAlongRoutePrompt_js_2.SearchAlongRoutePrompt();
50
+ /** Show areas reachable within a time limit */
51
+ exports.showReachableAreas = new ShowReachableAreasPrompt_js_2.ShowReachableAreasPrompt();
52
+ // Export registry functions for batch access
53
+ var promptRegistry_js_1 = require("./promptRegistry.js");
54
+ Object.defineProperty(exports, "getAllPrompts", { enumerable: true, get: function () { return promptRegistry_js_1.getAllPrompts; } });
55
+ Object.defineProperty(exports, "getPromptByName", { enumerable: true, get: function () { return promptRegistry_js_1.getPromptByName; } });
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompts/index.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,kCAAkC;;;AAElC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4BAA4B;AAC5B,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,mEAA+D;AAAtD,6HAAA,mBAAmB,OAAA;AAC5B,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,6EAAyE;AAAhE,uIAAA,wBAAwB,OAAA;AAEjC,0CAA0C;AAC1C,2EAAqE;AACrE,qEAA+D;AAC/D,2EAAqE;AACrE,+EAAyE;AAEzE,iEAAiE;AACjE,kCAAkC;AACrB,QAAA,gBAAgB,GAAG,IAAI,kDAAsB,EAAE,CAAC;AAE7D,uCAAuC;AAC1B,QAAA,aAAa,GAAG,IAAI,4CAAmB,EAAE,CAAC;AAEvD,kDAAkD;AACrC,QAAA,gBAAgB,GAAG,IAAI,kDAAsB,EAAE,CAAC;AAE7D,+CAA+C;AAClC,QAAA,kBAAkB,GAAG,IAAI,sDAAwB,EAAE,CAAC;AAEjE,6CAA6C;AAC7C,yDAI6B;AAH3B,kHAAA,aAAa,OAAA;AACb,oHAAA,eAAe,OAAA"}
@@ -1,5 +1,6 @@
1
1
  import { FindPlacesNearbyPrompt } from './FindPlacesNearbyPrompt.js';
2
2
  import { GetDirectionsPrompt } from './GetDirectionsPrompt.js';
3
+ import { SearchAlongRoutePrompt } from './SearchAlongRoutePrompt.js';
3
4
  import { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
4
5
  /**
5
6
  * Central registry of all available prompts.
@@ -7,7 +8,7 @@ import { ShowReachableAreasPrompt } from './ShowReachableAreasPrompt.js';
7
8
  * This module maintains a readonly collection of prompt instances and provides
8
9
  * type-safe access methods.
9
10
  */
10
- declare const ALL_PROMPTS: readonly [FindPlacesNearbyPrompt, GetDirectionsPrompt, ShowReachableAreasPrompt];
11
+ declare const ALL_PROMPTS: readonly [FindPlacesNearbyPrompt, GetDirectionsPrompt, SearchAlongRoutePrompt, ShowReachableAreasPrompt];
11
12
  /**
12
13
  * Type representing any prompt instance
13
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"promptRegistry.d.ts","sourceRoot":"","sources":["../../../src/prompts/promptRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE;;;;;GAKG;AAGH,QAAA,MAAM,WAAW,kFAIP,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,SAAS,cAAc,EAAE,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAExE"}
1
+ {"version":3,"file":"promptRegistry.d.ts","sourceRoot":"","sources":["../../../src/prompts/promptRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE;;;;;GAKG;AAGH,QAAA,MAAM,WAAW,0GAKP,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,SAAS,cAAc,EAAE,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAExE"}