Skip to main content
Glama
mcp-rest-bridge

mcp-rest-bridge

by atokim4

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

tools/list in the MCP Inspector CLI: 6 read-only tools and 2 write tools

Read tools:

Tool

What it answers

search_products

Find products by name/SKU text and/or category, with paging

get_product

One product's price, stock and reorder level

list_low_stock

Products at or below their reorder level (or a threshold you give)

get_order

Order status, customer, line items, total

list_customer_orders

A customer's orders, newest first

sales_summary

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

adjust_stock

Add or remove units with a reason; logged in a stock_movements table

create_order

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.

adjust_stock dry run, then the same call with confirm: true

Also:

  • Resource store://categories and resource template store://products/{sku}

  • Prompt restock_report: has the model build a purchase list from list_low_stock

  • Every tool has a zod input schema and an output schema and returns structuredContent plus JSON text

  • Two 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

Product ZZZ-999 not found. Use search_products to find a valid SKU

409

Not possible: Only 0 of TLS-005 in stock, 1 requested.

401

The store API rejected the credentials (401). The server operator should check STORE_API_KEY.

timeout

Store API did not answer within 5000 ms. Try again, or ask for a smaller result.

down

Could not reach the store API at http://... The API may be down.

5xx / bad JSON

The store API failed (502). Try again later. (details go to stderr)

A 404 from the API becomes a tool error with a recovery hint

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 data

src/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_stock

All 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.js

Over 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/list

Binding 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:

  1. src/domain.ts: describe your API's responses with zod (or reuse your OpenAPI types).

  2. 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-ApiError mapping. 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_WRITES and 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 + build

32 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 tools
get_orderGet order statusB
Read-only

Status, customer, line items and total of one order. All money values are integer cents (12999 = $129.99).

NameRequiredDescriptionDefault
order_idYesOrder number, e.g. 1007

Output Schema

NameRequiredDescription
idYes
itemsYes
statusYes
customerYes
createdAtYes
totalCentsYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 productA
Read-only

Full details and current stock for one product. All money values are integer cents (12999 = $129.99).

NameRequiredDescriptionDefault
skuYesProduct SKU, e.g. TLS-001

Output Schema

NameRequiredDescription
skuYes
nameYes
stockYes
categoryYes
priceCentsYes
reorderLevelYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 ordersA
Read-only

A customer's profile and all their orders, newest first. All money values are integer cents (12999 = $129.99).

NameRequiredDescriptionDefault
customer_idYesCustomer id

Output Schema

NameRequiredDescription
ordersYes
customerYes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 productsA
Read-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.

NameRequiredDescriptionDefault
thresholdNoOverride: units at or below this

Output Schema

NameRequiredDescription
itemsYes
totalYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 summaryA
Read-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).

NameRequiredDescriptionDefault
toNoEnd date YYYY-MM-DD (default: today)
topNoHow many top products to return
fromNoStart date YYYY-MM-DD (default: 29 days before `to`)

Output Schema

NameRequiredDescription
toYes
fromYes
byStatusYes
orderCountYes
topProductsYes
revenueCentsYes
averageOrderCentsYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 productsA
Read-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).

NameRequiredDescriptionDefault
limitNoPage size
queryNoText to match in product name or SKU
offsetNoItems to skip, for paging
categoryNoExact category name, e.g. Tools

Output Schema

NameRequiredDescription
itemsYes
totalYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 6 tool updatesv0.2.0
    • First observedget_order
    • First observedget_product
    • First observedlist_customer_orders
    • First observedlist_low_stock
    • First observedsales_summary
    • First observedsearch_products

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables 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.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes 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