Linkit

MCP Integration

Connect AI assistants to Linkit's public API via the Model Context Protocol — zero setup, eight semantic tools

MCP Integration

Connect Claude, Cursor, Windsurf, Gemini, or any MCP-compatible AI assistant directly to your Linkit instance. The MCP server exposes Linkit's public /api/v1 API — products, SKUs, branches, orders, offers, categories, brands, generics, customers, and the health probes — as eight domain-grouped tools plus one raw fallback, with zero local setup.

What is MCP? The Model Context Protocol is an open standard that lets AI assistants discover and call your APIs programmatically. Think of it as "USB for AI" — plug in and go.


Quick Start

Point your MCP client at your Linkit instance. That's it.

https://linkit.works/api/v1/mcp

Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "linkit": {
      "url": "https://linkit.works/api/v1/mcp"
    }
  }
}

Cursor

In Cursor settings → MCP Servers → Add Server:

{
  "mcpServers": {
    "linkit": {
      "url": "https://linkit.works/api/v1/mcp"
    }
  }
}

Windsurf

Add to your MCP configuration:

{
  "mcpServers": {
    "linkit": {
      "serverUrl": "https://linkit.works/api/v1/mcp"
    }
  }
}

Generic MCP Client

Any client supporting the Streamable HTTP transport can connect:

  • Endpoint: https://linkit.works/api/v1/mcp (also /mcp)
  • Transport: Streamable HTTP (stateless)
  • Protocol: MCP 2025-06-18

Authentication

Discovery needs no token: initialize, tools/list, resources/list and resources/read answer anyone. Calling a tool does. Configure your MCP client to send a Bearer token in the Authorization HTTP header:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Every tool call is authorized for that token's user, in that token's organization — the same permissions the REST API applies. A tool argument naming another organization is refused. The tools' authorization argument is kept for compatibility but is not a credential and is ignored.


Available Tools

The tools are generated from the published OpenAPI specification — the same document this site documents — so the MCP surface is the public API and nothing outside it. Each tool takes an action argument that selects one operation; the other arguments are that operation's path, query and body parameters.

check_health

ActionHTTPEndpoint
listGET/api/v1/health
list_systemGET/api/v1/health/system
ping_listGET/api/v1/ping
telemetry_listGET/api/v1/telemetry

manage_products

ActionHTTPEndpoint
listGET/api/v1/products
createPOST/api/v1/products
bulk_upsertPOST/api/v1/products/bulk
getGET/api/v1/products/iv/{ivId}
updatePUT/api/v1/products/iv/{ivId}
deleteDELETE/api/v1/products/iv/{ivId}

manage_inventory

ActionHTTPEndpoint
skus_createPOST/api/v1/skus
skus_bulk_upsertPOST/api/v1/skus/bulk
skus_getGET/api/v1/skus/iv/{ivId}
skus_updatePUT/api/v1/skus/iv/{ivId}
skus_deleteDELETE/api/v1/skus/iv/{ivId}
patch_skus_iv_by_id_stockPATCH/api/v1/skus/iv/{ivId}/stock

manage_branches

ActionHTTPEndpoint
listGET/api/v1/branches
createPOST/api/v1/branches
bulk_upsertPOST/api/v1/branches/bulk
getGET/api/v1/branches/{ivId}
updatePUT/api/v1/branches/{ivId}
deleteDELETE/api/v1/branches/{ivId}
update_working_hoursPUT/api/v1/branches/{ivId}/working-hours

manage_orders

ActionHTTPEndpoint
listGET/api/v1/orders
createPOST/api/v1/orders
bulk_upsertPOST/api/v1/orders/bulk
bulk_deleteDELETE/api/v1/orders/bulk
update_statusPATCH/api/v1/orders/bulk/status
exportGET/api/v1/orders/export
list_analytics_summaryGET/api/v1/orders/analytics/summary
getGET/api/v1/orders/{id}
updatePUT/api/v1/orders/{id}
deleteDELETE/api/v1/orders/{id}
patch_orders_by_id_statusPATCH/api/v1/orders/{id}/status

manage_offers

ActionHTTPEndpoint
listGET/api/v1/offers
createPOST/api/v1/offers
bulk_upsertPOST/api/v1/offers/bulk
getGET/api/v1/offers/{id}
updatePUT/api/v1/offers/{id}
deleteDELETE/api/v1/offers/{id}
update_statusPATCH/api/v1/offers/{id}/status

manage_catalog

Categories, brands and generics.

ActionHTTPEndpoint
categories_listGET/api/v1/categories
categories_createPOST/api/v1/categories
categories_bulk_upsertPOST/api/v1/categories/bulk
categories_list_treeGET/api/v1/categories/tree
categories_getGET/api/v1/categories/code/{code}
categories_updatePUT/api/v1/categories/code/{code}
categories_deleteDELETE/api/v1/categories/code/{code}
categories_movePATCH/api/v1/categories/code/{code}/move
patch_categories_code_by_id_productsPATCH/api/v1/categories/code/{code}/products
brands_listGET/api/v1/brands
brands_createPOST/api/v1/brands
brands_bulk_upsertPOST/api/v1/brands/bulk
brands_getGET/api/v1/brands/code/{brandCode}
brands_updatePUT/api/v1/brands/code/{brandCode}
brands_deleteDELETE/api/v1/brands/code/{brandCode}
patch_brands_code_by_id_productsPATCH/api/v1/brands/code/{brandCode}/products
generics_listGET/api/v1/generics
generics_createPOST/api/v1/generics
generics_bulk_upsertPOST/api/v1/generics/bulk
generics_searchPOST/api/v1/generics/search
generics_getGET/api/v1/generics/code/{genericCode}
generics_updatePUT/api/v1/generics/code/{genericCode}
generics_deleteDELETE/api/v1/generics/code/{genericCode}

manage_customers

Customers, customer groups and customer addresses.

ActionHTTPEndpoint
listGET/api/v1/customers
createPOST/api/v1/customers
bulk_upsertPOST/api/v1/customers/bulk
searchPOST/api/v1/customers/search
lookupGET/api/v1/customers/lookup
getGET/api/v1/customers/{id}
updatePUT/api/v1/customers/{id}
deleteDELETE/api/v1/customers/{id}
get_addressesGET/api/v1/customers/{customerId}/addresses
create_addressesPOST/api/v1/customers/{customerId}/addresses
update_addressesPUT/api/v1/customers/{customerId}/addresses/{addressId}
delete_addressesDELETE/api/v1/customers/{customerId}/addresses/{addressId}
customer_groups_listGET/api/v1/customer-groups
customer_groups_createPOST/api/v1/customer-groups
customer_groups_updatePUT/api/v1/customer-groups/{id}
customer_groups_deleteDELETE/api/v1/customer-groups/{id}

linkit_api

A raw fallback: method, path, query and body arguments, for when you need precise control over the request. It reaches the same operations as the tools above and nothing else — any other path is refused as an unrouted surface.

Authentication, payment orders and providers, and async job status are part of the published API but are not MCP tools. Call them over REST.


Available Resources

The MCP server also provides documentation resources that AI assistants can read:

Resource URIDescription
linkit://docs/swagger.jsonThe published OpenAPI specification (JSON) — the same document as /docs/swagger.json
linkit://docs/api-overviewAPI overview with auth, pagination, and resources
linkit://docs/tool-catalogEvery tool and action, with its method and path

Example Prompts

Once connected, try asking your AI assistant:

  • "List all my products using Linkit"
  • "Create a new branch called 'Dubai Mall' at coordinates 25.1972, 55.2744"
  • "Show me the health status of my Linkit instance"
  • "Which orders from the last 24 hours are still pending?"
  • "Set the stock of SKU IV-1001 at branch BR-001 to 40"

Technical Details

Architecture

The MCP server is part of the Linkit API server — no separate service to deploy or manage. It:

  1. Generates its tools from the published OpenAPI specification
  2. Authorizes every tool call for the calling user and organization
  3. Proxies the call as an HTTP request to the same Linkit REST API
  4. Returns the API response as MCP content

Transport

The server uses the Streamable HTTP transport in stateless mode, providing maximum compatibility with MCP clients. Each request is self-contained.

CORS

The MCP endpoint accepts connections from any origin, making it compatible with browser-based MCP clients and development tools. Tool calls still need a token.


Troubleshooting

Connection Failed

Verify your Linkit instance is running and accessible:

curl https://linkit.works/api/v1/ping

Authentication Errors

A tool call without a valid token is answered 401. Configure your MCP client to send Authorization: Bearer <token> as an HTTP header — passing the token as a tool argument does not authenticate.

Tool Not Found

Calling a tool name the server does not list is a JSON-RPC -32602 "unknown tool" error. The tool list is the public API's; Linkit's dashboard, operations and app-integration endpoints are not exposed over MCP.