mcp-rest-bridge
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-rest-bridgeWhich products are running low on stock?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-rest-bridge
An MCP server that lets Claude (or any MCP client) work with a store through its REST API: "what's running low?", "where is order 1007?", "how did we do in the last 30 days?", "we just got 20 drills, add them".
It comes with a small sample store API (products, customers, orders in SQLite) so the whole thing runs locally in a minute. Every name and number in that data is made up.
This is a personal portfolio project. What it shows is the pattern: a typed, tested MCP layer in front of an existing HTTP API, with safe writes and errors the model can act on.
Features

Read tools:
Tool | What it answers |
| Find products by name/SKU text and/or category, with paging |
| One product's price, stock and reorder level |
| Products at or below their reorder level (or a threshold you give) |
| Order status, customer, line items, total |
| A customer's orders, newest first |
| Revenue, order count, average order, status breakdown, top products for a date range |
Write tools, only registered when STORE_ALLOW_WRITES=true:
Tool | What it does |
| Add or remove units with a reason; logged in a |
| Pending order at list prices for an existing customer; reserves the stock |
Both write tools are dry runs unless the call says confirm: true. The dry run goes through the real API
inside a transaction that is rolled back, so the preview applies the same rules as the real write (no negative
stock, enough stock for every line, customer exists). The tool tells the model to show the preview and ask the
user before confirming.

Also:
Resource
store://categoriesand resource templatestore://products/{sku}Prompt
restock_report: has the model build a purchase list fromlist_low_stockEvery tool has a zod input schema and an output schema and returns
structuredContentplus JSON textTwo transports: stdio (Claude Desktop, Claude Code) and Streamable HTTP (stateless, bearer token required, DNS-rebinding protection from the SDK when bound to localhost)
Upstream failures become tool errors with a next step instead of stack traces:
Upstream | What the model sees |
404 |
|
409 |
|
401 |
|
timeout |
|
down |
|
5xx / bad JSON |
|

Related MCP server: mcp-api-bridge
Architecture
Claude Desktop / Claude Code / any MCP client
│ stdio, or Streamable HTTP + bearer token (src/stdio.ts, src/http.ts)
▼
src/mcp/ server.ts (read tools, resources, prompt), write-tools.ts (dry run / confirm),
│ tool-result.ts (ApiError -> tool error text), http-app.ts (HTTP endpoint)
▼
src/client/ StoreApiClient: fetch + timeout + bearer token, zod-validated responses,
│ ApiError with a `kind` (not_found, conflict, timeout, ...)
▼ HTTP
src/api/ sample store REST API: Express 5 + node:sqlite, seeded sample datasrc/domain.ts holds the zod schemas shared by the API, the client and the tools' output schemas, so a change
in the API's response shape shows up as a type error, and at runtime as a clear bad_response error.
Run it
Needs Node 22.13 or newer (uses the built-in node:sqlite).
npm install
npm run build
# terminal 1: the sample API (data resets on every start unless DATABASE_PATH is a file)
API_KEY=change-me-to-something-long npm run api
# terminal 2: try the MCP server with the MCP Inspector CLI
npx @modelcontextprotocol/inspector --cli node dist/stdio.js \
-e STORE_API_URL=http://127.0.0.1:4000/api -e STORE_API_KEY=change-me-to-something-long \
--method tools/call --tool-name list_low_stockAll settings are in .env.example.
Claude Desktop
Add this to claude_desktop_config.json (absolute path to your checkout), start the API, restart Claude:
{
"mcpServers": {
"store": {
"command": "node",
"args": ["/absolute/path/to/mcp-rest-bridge/dist/stdio.js"],
"env": {
"STORE_API_URL": "http://127.0.0.1:4000/api",
"STORE_API_KEY": "change-me-to-something-long",
"STORE_ALLOW_WRITES": "false"
}
}
}
}Claude Code:
claude mcp add store -e STORE_API_URL=http://127.0.0.1:4000/api -e STORE_API_KEY=change-me-to-something-long \
-- node /absolute/path/to/mcp-rest-bridge/dist/stdio.jsOver HTTP
STORE_API_KEY=change-me-to-something-long MCP_HTTP_TOKEN=another-long-random-token npm run mcp:http
# POST http://127.0.0.1:3000/mcp with "Authorization: Bearer another-long-random-token"
npx @modelcontextprotocol/inspector --cli http://127.0.0.1:3000/mcp --transport http \
--header "Authorization: Bearer another-long-random-token" --method tools/listBinding to anything other than localhost turns off the SDK's DNS-rebinding check; put it behind HTTPS and a reverse proxy in that case.
Pointing it at your own API
The MCP layer only knows StoreApiClient, so connecting a real system means changing two files:
src/domain.ts: describe your API's responses with zod (or reuse your OpenAPI types).src/client/rest-client.ts: one method per endpoint.request()already handles the base URL, bearer token, timeout, JSON parsing, response validation and status-to-ApiErrormapping. If your API uses another auth scheme (API key header, OAuth client credentials), change the headers there.
Then adjust the tools in src/mcp/ to the questions your users ask. Things that matter in practice:
Keep tool descriptions specific: what it returns, units (cents), and which tool to call first.
Write a recovery hint for every 404 (
callApi(fn, "Use search_products to find a valid SKU")).Keep writes behind
STORE_ALLOW_WRITESand the dry run, and give the server an API key that can only do what the tools need.Delete
src/api/once you have a real API; tests can keep using it as a stand-in.
Tests
npm run check # typecheck + eslint + vitest + build32 tests. They start the real sample API on a random port and talk to the MCP server through the SDK's own
Client: over the in-memory transport, as a spawned stdio process, and over Streamable HTTP. Covered: every
tool, the resources, the prompt, input validation, dry run vs confirm (stock and orders checked in the
database afterwards), 401 / 404 / 409 / timeout / connection refused, HTTP token check, 405 on GET and the
Host-header check.
Screenshots of a sales_summary call and the test run: docs/sales.png,
docs/tests.png. They show the bundled sample data.
Stack
TypeScript (strict), Node 22, @modelcontextprotocol/sdk 1.32, zod 4, Express 5, node:sqlite, vitest 5,
ESLint with typescript-eslint.
License
MIT
Available Tools
6 toolsget_orderGet order statusBRead-only
Status, customer, line items and total of one order. All money values are integer cents (12999 = $129.99).
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order number, e.g. 1007 |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| items | Yes | |
| status | Yes | |
| customer | Yes | |
| createdAt | Yes | |
| totalCents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral context about return content and the money-unit convention (integer cents), but it does not mention error behavior for missing orders or any other operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and the unit clarification is front-loaded after the field summary. It is efficient and free of filler, though the first sentence is a fragment rather than a structured verb-led statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values do not need full explanation, and the annotations cover read-only behavior. The description is complete enough for a simple single-parameter lookup, with the main remaining gap being sibling-based usage guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single order_id parameter is already documented in the schema with an example and constraints. The description adds no additional meaning about the parameter beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource and the fields returned: status, customer, line items, and total for one order. It does not name an explicit verb like 'retrieve', and it does not distinguish itself from the sibling list_customer_orders, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a single-order lookup by saying 'one order', but it gives no explicit guidance on when to use this tool versus list_customer_orders or other order-related siblings. There are no prerequisites, exclusions, or alternative-tool routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet productARead-only
Full details and current stock for one product. All money values are integer cents (12999 = $129.99).
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | Product SKU, e.g. TLS-001 |
Output Schema
| Name | Required | Description |
|---|---|---|
| sku | Yes | |
| name | Yes | |
| stock | Yes | |
| category | Yes | |
| priceCents | Yes | |
| reorderLevel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral note not in the structured fields: all money values are integer cents with a concrete example. It says nothing about not-found behavior or whether stock is real-time, which is what the parenthetical 'current stock' hints at but never resolves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the identity of the resource is front-loaded ahead of the unit convention. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema and clear annotations, the description covers what is needed to call it correctly. Only the unit convention is spelled out, which suggests the response shape is left to the output schema, so the burden is appropriately light.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the SKU pattern plus example are fully documented in the schema, so this is the baseline case. The description adds no formatting, normalization, or case-sensitivity meaning beyond what the parameter definition already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope: 'Full details and current stock for one product', which cleanly separates it from list-oriented siblings like search_products and list_low_stock. It stops short of naming those siblings explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'one product' signals a single-record lookup, and the required SKU parameter suggests the caller must already know the identifier. There is no explicit guidance that search_products should be used first to discover a SKU, nor any stated exclusion or alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customer_ordersList a customer's ordersARead-only
A customer's profile and all their orders, newest first. All money values are integer cents (12999 = $129.99).
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | Customer id |
Output Schema
| Name | Required | Description |
|---|---|---|
| orders | Yes | |
| customer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: rows come back newest-first and money values are integer cents with a worked example, which prevents misreading 12999 as dollars. It stops short of stating pagination or result-size limits despite saying 'all their orders'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The payload summary comes first and the unit convention second, so the agent gets the most decision-relevant information up front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be described, and the description fills the remaining gaps that matter most: ordering and money units. Only pagination/truncation behavior for large order histories and empty-result handling are unaddressed, which are minor for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required customer_id, so the schema already carries parameter meaning. The description adds no constraints (positive integer, unknown-customer behavior) beyond what the schema states, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource set — a customer's profile plus all their orders — and adds the ordering ('newest first'), so an agent knows exactly what comes back. It does not explicitly contrast with the sibling get_order, but the plural 'all their orders' effectively distinguishes the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing says to prefer this over get_order for a single order or over sales_summary for aggregates. The only signal is implicit in the name and the word 'all', leaving the agent to infer routing from the tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_low_stockList low-stock productsARead-only
Products that need restocking: stock at or below each product's own reorder level, or at or below threshold units if you pass one. Sorted by stock, lowest first.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold | No | Override: units at or below this |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read (readOnlyHint=true, openWorldHint=false), so the description is free to add operational detail — and it does, disclosing the default filtering logic (per-product reorder level) and the sort order (stock ascending). It does not cover pagination or result limits, keeping it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The default behavior is front-loaded and the optional override follows, matching the order in which an agent needs the information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter read tool with annotations and an output schema, the description covers everything that matters: selection rule, override semantics, and ordering. No further explanation of return values is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description earns more: it clarifies that threshold is an override of the per-product reorder level rather than an additional filter, which is a semantic distinction the schema's 'Override: units at or below this' only hints at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (products) and precisely defines the selection criterion: stock at or below each product's own reorder level. The phrase 'need restocking' gives the business meaning up front. It does not explicitly differentiate itself from the sibling search_products, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the tool is for restocking decisions, and the threshold parameter is framed as an 'Override'. There is no explicit when-to-use/when-not guidance and no mention of when to reach for search_products or get_product instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sales_summarySales summaryARead-only
Order count, revenue, average order value, orders by status and top products for a date range (inclusive, UTC). Cancelled orders are excluded from revenue. Defaults to the last 30 days. All money values are integer cents (12999 = $129.99).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD (default: today) | |
| top | No | How many top products to return | |
| from | No | Start date YYYY-MM-DD (default: 29 days before `to`) |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | |
| from | Yes | |
| byStatus | Yes | |
| orderCount | Yes | |
| topProducts | Yes | |
| revenueCents | Yes | |
| averageOrderCents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the description is not required to restate it. Instead it adds genuinely non-obvious behavior: cancelled orders are excluded from revenue, the date range is inclusive and interpreted in UTC, and all money is returned as integer cents. Those are exactly the semantics that would otherwise cause misreading of results; only the absence of any note on response shape or empty-range behavior keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, front-loaded with what the tool returns before moving to scope rules and unit conventions. Every sentence carries a distinct fact an agent would otherwise get wrong (exclusions, timezone, default window, cents). No filler, no restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not obliged to enumerate return fields, and it doesn't. It covers everything an agent needs before calling: scope, default window, inclusivity/timezone, exclusion rule, and currency units, all with zero required parameters. Nothing material is missing for a read-only analytics tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and all three parameters are already documented. The description still contributes meaning the schema does not: that the range bounds are inclusive and evaluated in UTC, and that the default window is the last 30 days, which is a more actionable statement than the schema's '29 days before `to`'. It adds real interpretation value above the structured baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource and the exact metrics produced (order count, revenue, AOV, orders by status, top products) plus the scoping dimension (date range). Nothing here is tautological; an agent immediately knows this is an aggregate reporting tool, not a record fetcher like get_order or list_customer_orders. It stops short of naming a sibling or a contrasting alternative, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the metric list signals 'reporting/analytics' and the default window tells the agent it can call with no arguments. There is no explicit when-to-use versus when-not, and no routing to or away from the sibling order/product tools. Adequate for an obviously-scoped summary tool, but the agent must infer the boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsSearch productsARead-only
Search the catalog by name or SKU fragment and/or exact category. Returns a page of products and the total match count. All money values are integer cents (12999 = $129.99).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size | |
| query | No | Text to match in product name or SKU | |
| offset | No | Items to skip, for paging | |
| category | No | Exact category name, e.g. Tools |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description usefully adds that results are paged with a total match count and that money values are integer cents, but it says nothing about result ordering, empty-result behavior, or matching case sensitivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the search behavior front-loaded and the unit convention trailing. No filler, no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully-documented, output-schema-backed search tool this covers what an agent needs to call it: inputs, paging, and the cents convention. Only sibling routing guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema. The description reinforces that query matches name or SKU and category must be exact, which is mild value-add over the schema but nothing the schema doesn't already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search the catalog) plus the match semantics: name or SKU fragment and/or exact category. That 'fragment' framing implicitly separates it from get_product's single-record fetch, but no sibling is named explicitly, so it falls short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when the tool applies (fuzzy name/SKU lookup or exact category filtering) and that criteria can be combined, but it never says when not to use it or points to get_product for exact single-item retrieval. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.2.0- First observed
get_order - First observed
get_product - First observed
list_customer_orders - First observed
list_low_stock - First observed
sales_summary - First observed
search_products
TDQS
Scored across 6 tools
Each tool targets a distinct resource+action pair: product search vs single product fetch, low-stock filtering, single order fetch, per-customer order history, and aggregate sales reporting. The two order-reading tools (get_order vs list_customer_orders) are clearly separated by scope (one order vs a customer's profile plus all orders), and descriptions reinforce the boundaries.
Five of six names follow a clean verb_noun pattern (search_products, get_product, list_low_stock, get_order, list_customer_orders). sales_summary breaks the pattern by dropping the verb, a minor but noticeable deviation.
Six tools is a tight, well-scoped set with no filler and no overlap. It leans slightly thin for a commerce bridge, with no write-side tools at all, but every included tool earns its place.
Read coverage is solid (catalog search/detail, stock alerts, orders, customer history, sales aggregation), but the surface is entirely read-only: no product creation, no stock adjustment/restock, and no order status or fulfillment updates. Agents can answer questions but cannot complete inventory or order lifecycle operations.
Maintenance
Related MCP Connectors
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Connect Amazon Seller Central to Claude or ChatGPT via MCP. Orders, inventory, pricing, fees, FBA.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA real, runnable MCP server exposing three read-only tools (inventory, pricing, hours) with a CLI agent that lets Claude discover and call them.MIT
- AlicenseBqualityCmaintenanceEnables AI assistants like Claude to interact with any REST API through typed, validated MCP tools. Provides a pattern to wrap REST APIs as MCP servers.4MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that connects Claude to Shopify stores, enabling natural language queries and actions on products, orders, customers, inventory, and sales analytics. Includes a demo mode with bundled fixtures for trying tools without credentials.86 npmMIT
- AlicenseNot gradedqualityBmaintenanceExposes three read-only tools over stdio — guarded SQL querying, SKU status lookup, and document retrieval — plus a schema resource. This lets MCP clients such as Claude Code answer stock and policy questions without any write access.MIT