@databrainhq/mcp-server 0.1.1-test → 0.2.1

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.
package/README.md CHANGED
@@ -1,71 +1,30 @@
1
1
  # @databrainhq/mcp-server
2
2
 
3
- MCP server for Databrain embedded analytics. Connect it to any AI assistant and say **"set up a Databrain embed"** — it walks you through the entire flow interactively.
3
+ Add embedded analytics to your app using natural language. Connect this MCP server to any AI assistant and describe what you want — it handles the Databrain API for you.
4
4
 
5
- ---
5
+ ```
6
+ "What was total revenue last month?"
7
+ "Embed my sales dashboard in my React app"
8
+ ```
6
9
 
7
- ## Quick Start
10
+ Works with Claude, Cursor, Windsurf, and any MCP-compatible client.
8
11
 
9
- ### Prerequisites
12
+ ---
10
13
 
11
- - Node.js 18+
12
- - Databrain Cloud account ([usedatabrain.com](https://usedatabrain.com))
13
- - Service token (Settings > Service Tokens in Databrain UI)
14
+ ## Setup (2 minutes)
14
15
 
15
- ### 1. Get Your Service Token
16
+ ### 1. Get your Service Token
16
17
 
17
18
  1. Log in to [Databrain](https://usedatabrain.com)
18
- 2. Go to **Settings > Service Tokens**
19
+ 2. Go to **Settings → Service Tokens**
19
20
  3. Create a new token and copy it
20
21
 
21
- ### 2. Connect to Your AI Assistant
22
-
23
- Pick your client below. All configs use the same MCP server — just different config file locations.
24
-
25
- ---
26
-
27
- #### Claude Desktop
28
-
29
- File: `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows)
30
-
31
- ```json
32
- {
33
- "mcpServers": {
34
- "databrain": {
35
- "command": "npx",
36
- "args": ["@databrainhq/mcp-server"],
37
- "env": {
38
- "DATABRAIN_SERVICE_TOKEN": "<your-service-token>",
39
- "DATABRAIN_API_URL": "https://api.usedatabrain.com"
40
- }
41
- }
42
- }
43
- }
44
- ```
45
-
46
- #### Claude Code (CLI)
22
+ ### 2. Add to your AI client
47
23
 
48
- ```bash
49
- claude mcp add databrain -- npx @databrainhq/mcp-server
50
- ```
51
-
52
- Then set your token in the environment:
53
- ```bash
54
- export DATABRAIN_SERVICE_TOKEN="<your-service-token>"
55
- ```
56
-
57
- Or add to your project's `.claude/settings.json`:
58
- ```json
59
- {
60
- "env": {
61
- "DATABRAIN_SERVICE_TOKEN": "<your-service-token>"
62
- }
63
- }
64
- ```
65
-
66
- #### Cursor
24
+ <details>
25
+ <summary><b>Cursor</b></summary>
67
26
 
68
- File: `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global)
27
+ Add to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global):
69
28
 
70
29
  ```json
71
30
  {
@@ -80,10 +39,12 @@ File: `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global)
80
39
  }
81
40
  }
82
41
  ```
42
+ </details>
83
43
 
84
- #### Windsurf
44
+ <details>
45
+ <summary><b>Claude Desktop</b></summary>
85
46
 
86
- File: `~/.codeium/windsurf/mcp_config.json`
47
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
87
48
 
88
49
  ```json
89
50
  {
@@ -98,17 +59,26 @@ File: `~/.codeium/windsurf/mcp_config.json`
98
59
  }
99
60
  }
100
61
  ```
62
+ </details>
101
63
 
102
- #### ChatGPT (via MCP bridge)
64
+ <details>
65
+ <summary><b>Claude Code (CLI)</b></summary>
103
66
 
104
- ChatGPT doesn't natively support MCP yet. Use an MCP-to-OpenAI bridge like [mcp-bridge](https://github.com/nicobailon/mcp-bridge) or [mcp-openai](https://github.com/AshDevFr/mcp-openai-proxy):
67
+ ```bash
68
+ claude mcp add databrain -- npx @databrainhq/mcp-server
69
+ ```
105
70
 
71
+ Set your token:
106
72
  ```bash
107
- # Example with mcp-bridge
108
- npx mcp-bridge --config mcp-config.json
73
+ export DATABRAIN_SERVICE_TOKEN="<your-service-token>"
109
74
  ```
75
+ </details>
76
+
77
+ <details>
78
+ <summary><b>Windsurf</b></summary>
79
+
80
+ Add to `~/.codeium/windsurf/mcp_config.json`:
110
81
 
111
- `mcp-config.json`:
112
82
  ```json
113
83
  {
114
84
  "mcpServers": {
@@ -122,199 +92,269 @@ npx mcp-bridge --config mcp-config.json
122
92
  }
123
93
  }
124
94
  ```
95
+ </details>
125
96
 
126
- #### Any MCP-Compatible Client
97
+ <details>
98
+ <summary><b>Any MCP-compatible client</b></summary>
127
99
 
128
- The server uses **stdio transport** by default. Any client that supports MCP stdio can connect:
100
+ The server uses stdio transport. Set environment variables and run:
129
101
 
130
102
  ```bash
103
+ export DATABRAIN_SERVICE_TOKEN="<your-service-token>"
131
104
  npx @databrainhq/mcp-server
132
105
  ```
106
+ </details>
133
107
 
134
- Set environment variables before running:
135
- ```bash
136
- export DATABRAIN_SERVICE_TOKEN="<your-service-token>"
137
- export DATABRAIN_API_URL="https://api.usedatabrain.com" # optional, this is the default
138
- ```
108
+ ### 3. Start talking
109
+
110
+ Open your AI assistant and try any of these:
111
+
112
+ > **"Set up a Databrain embed for my dashboard"**
113
+
114
+ > **"Brand my embed to match our company colors"**
115
+
116
+ > **"What was total revenue last month?"**
117
+
118
+ The assistant walks you through each step interactively — picking your data app, selecting a workspace and dashboard, creating the embed, and generating the frontend code.
139
119
 
140
120
  ---
141
121
 
142
- ### 3. Start Using It
122
+ ## What you can ask
123
+
124
+ ### Query your data
125
+
126
+ Ask questions in natural language — the AI converts them to SQL, runs the query, and returns results with a chart type suggestion.
127
+
128
+ > "What was total revenue last month?"
129
+
130
+ > "Show me the monthly revenue trend for the past year"
131
+
132
+ > "Compare sales by region — break it down by quarter"
133
+
134
+ No setup required beyond your service token. Use `list_datamarts` to see available data, and the AI handles the rest. Follow-up questions use conversation context for better accuracy.
135
+
136
+ > "Now show only the top 5 regions"
137
+
138
+ If results seem off, improve the **semantic layer** — the metadata that helps the AI understand your column names and relationships:
139
+
140
+ > "Check the semantic layer quality for my orders datamart"
141
+
142
+ > "Add descriptions and synonyms to improve query accuracy"
143
+
144
+ ### Embed a dashboard
145
+
146
+ The most common flow. You have dashboards in the Databrain UI and want to embed them.
143
147
 
144
- Once connected, just tell your AI assistant:
148
+ > "Embed my sales dashboard in my React app"
145
149
 
146
- > **"Set up a Databrain dashboard embed"**
150
+ The assistant will: discover your data apps → ensure API token → select workspace → list dashboards → create embed → generate a guest token → give you framework-specific code.
147
151
 
148
- The assistant will use the `setup_embed_interactive` tool to walk you through:
149
- 1. Discovering your data apps (confirms your choice even if there's only one)
150
- 2. Checking/creating an API token
151
- 3. Listing embeds and confirming which one to use
152
- 4. Validating the pipeline with a test guest token
153
- 5. Returning a ready-to-use config block with all IDs and env vars
152
+ ### Brand and theme
154
153
 
155
- No need to memorize tool names or API details — the orchestrator handles it.
154
+ Customize colors, fonts, chart styles, responsive breakpoints, and card styling.
155
+
156
+ > "Make my embed match our brand — primary color #4F46E5, dark mode, Inter font"
157
+
158
+ > "Apply the corporate theme preset and hide the dashboard name"
159
+
160
+ ### Multi-tenant embeds
161
+
162
+ Each of your customers gets their own dashboard with row-level security.
163
+
164
+ > "Create per-client dashboard embeds for my SaaS app"
165
+
166
+ ### Enable self-serve analytics
167
+
168
+ Let end-users build their own metrics with drag-and-drop or AI-powered chat.
169
+
170
+ > "Enable metric creation on my embed with the visual builder"
171
+
172
+ ### Filters, localization, permissions
173
+
174
+ > "Add a date range filter and a region dropdown to my dashboard"
175
+
176
+ > "Set up French translations for my embed"
177
+
178
+ > "Lock down the embed so users can only view, not edit"
156
179
 
157
180
  ---
158
181
 
159
182
  ## Environment Variables
160
183
 
161
- | Variable | Required | Description |
162
- |----------|----------|-------------|
163
- | `DATABRAIN_SERVICE_TOKEN` | Yes* | Organization-level token for datasources, data apps, datamarts |
164
- | `DATABRAIN_API_TOKEN` | No | Data-app-scoped token for embeds, queries, guest tokens. Can be created via `create_api_token` tool |
165
- | `DATABRAIN_API_URL` | No | API base URL (default: `https://api.usedatabrain.com`) |
166
-
167
- *At least one of `DATABRAIN_SERVICE_TOKEN` or `DATABRAIN_API_TOKEN` is required.
184
+ | Variable | Required | Default | Description |
185
+ |----------|----------|---------|-------------|
186
+ | `DATABRAIN_SERVICE_TOKEN` | **Yes** | — | Org-level token from Settings → Service Tokens. Powers all discovery and setup operations. |
187
+ | `DATABRAIN_API_TOKEN` | No | — | Per-data-app token. Created automatically during setup via `create_api_token`, or set manually if you already have one. |
188
+ | `DATABRAIN_API_URL` | No | `https://api.usedatabrain.com` | API base URL. Only change this for self-hosted Databrain. |
168
189
 
169
190
  ---
170
191
 
171
- ## What's Inside
192
+ ## Available Prompts
172
193
 
173
- ### Orchestration
174
- - `setup_embed_interactive` — Interactive step-by-step embed setup. Confirms choices with the user, validates the pipeline, and returns a deterministic config block.
194
+ Prompts are guided workflows your AI assistant can follow. Ask for them by name or describe what you want.
175
195
 
176
- ### Tools (38 total)
196
+ | Prompt | What it does |
197
+ |--------|-------------|
198
+ | `embed-existing-dashboard` | Embed a dashboard you've already built in the Databrain UI |
199
+ | `embed-blank-dashboard` | Multi-tenant setup — each client gets their own dashboard |
200
+ | `enable-metric-creation` | Let end-users build metrics (drag-and-drop or AI chat) |
201
+ | `brand-my-embed` | Customize colors, fonts, charts, card styling, responsive layout |
202
+ | `localize-embed` | Multi-language support, translations, calendar format |
203
+ | `secure-my-embed` | Permissions, access controls, role-based guest tokens |
204
+ | `setup-filters` | Dashboard filters — dropdowns, date ranges, server-side filters |
205
+ | `manage-embeds` | List, compare, and review existing embed configurations |
206
+ | `query-data` | Query your data with natural language, manage the semantic layer |
207
+ | `populate-semantic-layer` | Auto-generate table/column descriptions to enable natural language querying |
177
208
 
178
- <details>
179
- <summary>Infrastructure (3)</summary>
209
+ ---
180
210
 
181
- - `list_datasources` — List all connected datasources
182
- - `create_datasource` — Connect a new database (Postgres, Snowflake, BigQuery, MySQL, Redshift, and more)
183
- - `sync_datasource` — Trigger schema metadata sync after connecting a database
184
- </details>
211
+ ## Tools Reference
212
+
213
+ 24 tools organized by category. Your AI assistant picks the right tools automatically — you don't need to call them directly.
214
+
215
+ > **Note:** Infrastructure creation (datasources, datamarts, workspaces) is done in the **Databrain UI**. However, the **semantic layer** is populated via MCP tools (`get_semantic_layer`, `update_semantic_layer`) — the AI auto-generates descriptions from column names.
185
216
 
186
217
  <details>
187
- <summary>Data Apps & Tokens (6)</summary>
188
-
189
- - `create_data_app` — Create a logical container for embeds
190
- - `list_data_apps` — List data apps
191
- - `create_api_token` — Generate API token scoped to a data app
192
- - `list_api_tokens` — List API tokens for a data app
193
- - `rotate_api_token` — Rotate an API token (invalidates the old one)
194
- - `set_api_token` — Set an existing API token for the current session (no env var needed)
218
+ <summary><b>Infrastructure — Exploration & Linking</b> (5)</summary>
219
+
220
+ | Tool | Description |
221
+ |------|-------------|
222
+ | `list_datasources` | List connected datasources |
223
+ | `discover_datasource_schema` | Inspect a datasource to see available tables and columns |
224
+ | `list_datamarts` | List datamarts |
225
+ | `list_workspaces` | List all workspaces (shows datamart/datasource connections) |
226
+ | `link_datamart_to_workspace` | Link a datamart to an existing workspace |
195
227
  </details>
196
228
 
197
229
  <details>
198
- <summary>Datamarts & Semantic Layer (4)</summary>
199
-
200
- - `list_datamarts` — List datamarts
201
- - `create_datamart` — Create a curated subset of tables for analytics
202
- - `get_semantic_layer_status` — Check semantic layer generation progress
203
- - `generate_semantic_layer` — Auto-generate semantic layer for AI chat mode
230
+ <summary><b>Data Apps & Tokens</b> (5)</summary>
231
+
232
+ | Tool | Description |
233
+ |------|-------------|
234
+ | `list_data_apps` | List data apps |
235
+ | `create_data_app` | Create a new data app |
236
+ | `list_api_tokens` | List API tokens for a data app |
237
+ | `create_api_token` | Create and activate an API token |
238
+ | `rotate_api_token` | Rotate an existing API token |
204
239
  </details>
205
240
 
206
241
  <details>
207
- <summary>Embed Management (7)</summary>
208
-
209
- - `create_embed` — Create embed config for a dashboard/metric
210
- - `list_embeds` — List embed configurations
211
- - `get_embed_details` — Get full embed details
212
- - `update_embed` — Update embed access settings, permissions, or theme
213
- - `delete_embed` — Delete an embed configuration
214
- - `rename_embed` — Rename an embed
215
- - `apply_embed_preset` — Apply theme/access presets (light/dark/corporate/minimal + view-only/power-user/export-only/ai-enabled)
242
+ <summary><b>Embeds</b> (7) — Create, configure, and customize embedded dashboards</summary>
243
+
244
+ | Tool | Description |
245
+ |------|-------------|
246
+ | `create_embed` | Create an embed (standard or multi-tenant with `clientId`) |
247
+ | `list_embeds` | List embed configurations |
248
+ | `get_embed_details` | Get full embed details by ID |
249
+ | `update_embed` | Update embed config (raw patch) |
250
+ | `customize_embed_theme` | Presets, colors, fonts, cards, chart appearance, responsive layout |
251
+ | `configure_embed` | UI options, filters (string/date/number/SQL), i18n, translations |
252
+ | `diagnose_embed_health` | Diagnose malformed embeds + validate runtime readiness |
216
253
  </details>
217
254
 
218
255
  <details>
219
- <summary>Customization (5)</summary>
256
+ <summary><b>Frontend</b> (2) — Guest tokens and code generation</summary>
220
257
 
221
- - `customize_embed_theme` — Set colors, typography, card styling, dashboard layout, chart fonts, buttons, checkboxes, and more
222
- - `configure_chart_appearance` — Configure chart tooltip, legend, axes, labels, margins, and color palettes
223
- - `configure_embed_options` — Toggle ~30 display/permission flags (metric ops, layout, downloads, loaders, UI, custom messages)
224
- - `configure_filters` — Set up dashboard filters with defaults, date presets, SQL-based options, and visibility
225
- - `configure_internationalization` — Set language (12 supported), translations, calendar type, and custom messages
258
+ | Tool | Description |
259
+ |------|-------------|
260
+ | `generate_guest_token` | Generate a frontend guest token (server-side) |
261
+ | `generate_embed_code` | Generate integration code (React, Next.js, Vue, Angular, Svelte, vanilla JS) |
226
262
  </details>
227
263
 
228
264
  <details>
229
- <summary>Frontend Embedding (2)</summary>
265
+ <summary><b>Query & Semantic Layer</b> (3) — Ask questions and manage data documentation</summary>
230
266
 
231
- - `generate_guest_token` — Generate frontend auth token with filters, theme overrides, permissions, and multi-datasource support
232
- - `generate_embed_code` — Generate framework-specific code (React, Next.js, Vue, Angular, Svelte, SolidJS, vanilla JS)
267
+ | Tool | Description |
268
+ |------|-------------|
269
+ | `ask_question` | Ask a natural language question — gets converted to SQL, returns data + chart suggestion |
270
+ | `get_semantic_layer` | Inspect semantic layer metadata (table/column descriptions, synonyms, completion score) |
271
+ | `update_semantic_layer` | Improve semantic layer quality (add descriptions, synonyms, example questions) |
233
272
  </details>
234
273
 
235
274
  <details>
236
- <summary>Data & Analytics (9)</summary>
237
-
238
- - `list_dashboards` — List dashboards
239
- - `list_metrics` — List metrics
240
- - `query_metric_data` — Fetch metric data
241
- - `get_dashboard_data` — Fetch all metrics in a dashboard
242
- - `ask_ai_pilot` — Natural language data questions
243
- - `download_metric_csv` — Export metric data as CSV
244
- - `list_scheduled_reports` — List scheduled email reports
245
- - `export_dashboard` — Export a dashboard as JSON
246
- - `import_dashboard` — Import a dashboard from JSON
275
+ <summary><b>Discovery & Orchestration</b> (2)</summary>
276
+
277
+ | Tool | Description |
278
+ |------|-------------|
279
+ | `list_dashboards` | List dashboards (by data app, workspace, or globally) |
280
+ | `setup_embed_interactive` | Guided step-by-step flow for the full embed setup |
247
281
  </details>
248
282
 
249
- ### Resources (9)
283
+ ---
250
284
 
251
- - `databrain://getting-started` — Entity model and onboarding guide
252
- - `databrain://api-reference` — API endpoint reference
253
- - `databrain://embedding-guide` — Framework-specific embedding instructions
254
- - `databrain://filter-reference` — Filter types and operators
255
- - `databrain://theme-reference` — Theme customization
256
- - `databrain://web-component-reference` — Web component props
257
- - `databrain://self-serve-reference` — Self-serve analytics settings
258
- - `databrain://semantic-layer-guide` — Semantic layer for AI chat
259
- - `databrain://multi-tenancy-guide` — Multi-tenant row-level security
285
+ ## Built-in Knowledge
260
286
 
261
- ### Prompts (12)
287
+ The server includes 11 reference guides that your AI assistant can consult automatically:
262
288
 
263
- <details>
264
- <summary>Setup & Onboarding (4)</summary>
289
+ | Resource | Content |
290
+ |----------|---------|
291
+ | Getting Started | Entity model, onboarding checklist, token types |
292
+ | API Reference | All Databrain API endpoints |
293
+ | Embedding Guide | Framework-specific code (React, Next.js, Vue, Angular, Svelte, vanilla JS) |
294
+ | Theme Reference | Full theme schema — admin theme, component theme, chart appearance |
295
+ | Web Component Reference | All `<dbn-dashboard>` and `<dbn-metric>` attributes |
296
+ | Filter Reference | Filter types, operators, server-side filters |
297
+ | Self-Serve Reference | Permission flags, metric creation modes |
298
+ | Semantic Layer Guide | AI-powered metric creation setup |
299
+ | Multi-Tenancy Guide | Row-level security, clientId patterns, tenant isolation |
300
+ | Use Case Guides | Decision guide for choosing the right setup path |
301
+ | Permission Schema | Embed accessSettings, guest token permissions, precedence rules |
265
302
 
266
- - `explore-data` — Discover available data and dashboards in your workspace
267
- - `setup-from-scratch` — Full guided setup: datasource → datamarts → dashboard → embed → frontend code
268
- - `setup-ai-chat` — Enable AI Pilot (natural language Q&A) on your embedded dashboard
269
- - `setup-multi-tenant` — Configure row-level security so each customer only sees their own data
270
- </details>
303
+ ---
271
304
 
272
- <details>
273
- <summary>Customization (4)</summary>
305
+ ## Troubleshooting
274
306
 
275
- - `brand-my-embed` — Customize colors, fonts, chart styles, and component theme
276
- - `localize-embed` — Set up multi-language support with translations and locale settings
277
- - `secure-my-embed` — Configure permissions, access controls, and role-based guest tokens
278
- - `setup-filters` — Configure dashboard filters: string, date, number, SQL-based, and server-side
279
- </details>
307
+ ### "MISSING_SERVICE_TOKEN" error
280
308
 
281
- <details>
282
- <summary>Operations & Troubleshooting (4)</summary>
309
+ Your service token isn't set. Check that `DATABRAIN_SERVICE_TOKEN` is in your MCP config's `env` block and restart your AI client.
283
310
 
284
- - `diagnose-embed` — Troubleshoot a broken or misconfigured embed
285
- - `analyze-data` — Query metrics, export data, apply filters, and ask AI-powered questions
286
- - `manage-dashboards` — Export, import, and promote dashboards between environments
287
- - `manage-embeds` — List, compare, rename, delete embeds and rotate API tokens
288
- </details>
311
+ ### "MISSING_API_TOKEN" error
289
312
 
290
- ---
313
+ This is normal during first-time setup. The assistant will automatically create one via `create_api_token`. If it persists, ask: *"Create an API token for my data app"*.
291
314
 
292
- ## For AI/LLM Developers
315
+ ### No dashboards found
293
316
 
294
- See [`docs/LLM_INSTRUCTIONS.md`](docs/LLM_INSTRUCTIONS.md) for detailed guidance on:
295
- - Tool chaining and dependency graph
296
- - Common workflows (embed, explore, theme, filters, i18n, AI chat, roles, export/import)
297
- - Error recovery patterns
298
- - Expected output formats
299
- - Security guardrails
317
+ This usually means no workspace was selected. Ask the assistant: *"List my workspaces and then show dashboards"*. Dashboards are scoped to workspaces.
300
318
 
301
- ---
319
+ ### Embed not rendering in frontend
320
+
321
+ 1. Check that the guest token is generated **server-side** (never expose API tokens in frontend code)
322
+ 2. Verify the embed ID and dashboard ID match
323
+ 3. Ask: *"Run a health check on my embed"* — this runs `diagnose_embed_health`
324
+
325
+ ### Theme changes not showing
326
+
327
+ After updating theme or options, existing guest tokens still carry the old config. Regenerate your guest token or reload your app.
302
328
 
303
- ## Development
329
+ ### Server won't start
304
330
 
331
+ Make sure you have Node.js 18+ installed:
305
332
  ```bash
306
- npm install
307
- npm run build # Build with tsup
308
- npm test # Run tests with vitest
309
- npm run dev # Run with tsx (development)
310
- npm run lint # Type check
333
+ node --version # Should be v18.0.0 or higher
311
334
  ```
312
335
 
313
- ### Testing with MCP Inspector
336
+ ---
337
+
338
+ ## How it works
314
339
 
315
- ```bash
316
- npx @modelcontextprotocol/inspector -- npx tsx src/index.ts
317
340
  ```
341
+ Your AI Client ←→ MCP Server ←→ Databrain API
342
+ (Claude, (this (your data,
343
+ Cursor, package) dashboards,
344
+ etc.) embeds)
345
+ ```
346
+
347
+ The MCP server translates natural language requests into Databrain API calls. It manages authentication (service tokens, API tokens, guest tokens), validates inputs, and provides guided workflows so you don't need to learn the Databrain API directly.
348
+
349
+ All tokens are managed automatically. You provide your service token once in the config — everything else is created and handled by the server during setup.
350
+
351
+ ---
352
+
353
+ ## Links
354
+
355
+ - [Databrain](https://usedatabrain.com) — Sign up and create dashboards
356
+ - [Databrain Docs](https://docs.usedatabrain.com) — Full platform documentation
357
+ - [MCP Protocol](https://modelcontextprotocol.io) — Learn about Model Context Protocol
318
358
 
319
359
  ---
320
360