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/mcpClaude 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
| Action | HTTP | Endpoint |
|---|---|---|
list | GET | /api/v1/health |
list_system | GET | /api/v1/health/system |
ping_list | GET | /api/v1/ping |
telemetry_list | GET | /api/v1/telemetry |
manage_products
| Action | HTTP | Endpoint |
|---|---|---|
list | GET | /api/v1/products |
create | POST | /api/v1/products |
bulk_upsert | POST | /api/v1/products/bulk |
get | GET | /api/v1/products/iv/{ivId} |
update | PUT | /api/v1/products/iv/{ivId} |
delete | DELETE | /api/v1/products/iv/{ivId} |
manage_inventory
| Action | HTTP | Endpoint |
|---|---|---|
skus_create | POST | /api/v1/skus |
skus_bulk_upsert | POST | /api/v1/skus/bulk |
skus_get | GET | /api/v1/skus/iv/{ivId} |
skus_update | PUT | /api/v1/skus/iv/{ivId} |
skus_delete | DELETE | /api/v1/skus/iv/{ivId} |
patch_skus_iv_by_id_stock | PATCH | /api/v1/skus/iv/{ivId}/stock |
manage_branches
| Action | HTTP | Endpoint |
|---|---|---|
list | GET | /api/v1/branches |
create | POST | /api/v1/branches |
bulk_upsert | POST | /api/v1/branches/bulk |
get | GET | /api/v1/branches/{ivId} |
update | PUT | /api/v1/branches/{ivId} |
delete | DELETE | /api/v1/branches/{ivId} |
update_working_hours | PUT | /api/v1/branches/{ivId}/working-hours |
manage_orders
| Action | HTTP | Endpoint |
|---|---|---|
list | GET | /api/v1/orders |
create | POST | /api/v1/orders |
bulk_upsert | POST | /api/v1/orders/bulk |
bulk_delete | DELETE | /api/v1/orders/bulk |
update_status | PATCH | /api/v1/orders/bulk/status |
export | GET | /api/v1/orders/export |
list_analytics_summary | GET | /api/v1/orders/analytics/summary |
get | GET | /api/v1/orders/{id} |
update | PUT | /api/v1/orders/{id} |
delete | DELETE | /api/v1/orders/{id} |
patch_orders_by_id_status | PATCH | /api/v1/orders/{id}/status |
manage_offers
| Action | HTTP | Endpoint |
|---|---|---|
list | GET | /api/v1/offers |
create | POST | /api/v1/offers |
bulk_upsert | POST | /api/v1/offers/bulk |
get | GET | /api/v1/offers/{id} |
update | PUT | /api/v1/offers/{id} |
delete | DELETE | /api/v1/offers/{id} |
update_status | PATCH | /api/v1/offers/{id}/status |
manage_catalog
Categories, brands and generics.
| Action | HTTP | Endpoint |
|---|---|---|
categories_list | GET | /api/v1/categories |
categories_create | POST | /api/v1/categories |
categories_bulk_upsert | POST | /api/v1/categories/bulk |
categories_list_tree | GET | /api/v1/categories/tree |
categories_get | GET | /api/v1/categories/code/{code} |
categories_update | PUT | /api/v1/categories/code/{code} |
categories_delete | DELETE | /api/v1/categories/code/{code} |
categories_move | PATCH | /api/v1/categories/code/{code}/move |
patch_categories_code_by_id_products | PATCH | /api/v1/categories/code/{code}/products |
brands_list | GET | /api/v1/brands |
brands_create | POST | /api/v1/brands |
brands_bulk_upsert | POST | /api/v1/brands/bulk |
brands_get | GET | /api/v1/brands/code/{brandCode} |
brands_update | PUT | /api/v1/brands/code/{brandCode} |
brands_delete | DELETE | /api/v1/brands/code/{brandCode} |
patch_brands_code_by_id_products | PATCH | /api/v1/brands/code/{brandCode}/products |
generics_list | GET | /api/v1/generics |
generics_create | POST | /api/v1/generics |
generics_bulk_upsert | POST | /api/v1/generics/bulk |
generics_search | POST | /api/v1/generics/search |
generics_get | GET | /api/v1/generics/code/{genericCode} |
generics_update | PUT | /api/v1/generics/code/{genericCode} |
generics_delete | DELETE | /api/v1/generics/code/{genericCode} |
manage_customers
Customers, customer groups and customer addresses.
| Action | HTTP | Endpoint |
|---|---|---|
list | GET | /api/v1/customers |
create | POST | /api/v1/customers |
bulk_upsert | POST | /api/v1/customers/bulk |
search | POST | /api/v1/customers/search |
lookup | GET | /api/v1/customers/lookup |
get | GET | /api/v1/customers/{id} |
update | PUT | /api/v1/customers/{id} |
delete | DELETE | /api/v1/customers/{id} |
get_addresses | GET | /api/v1/customers/{customerId}/addresses |
create_addresses | POST | /api/v1/customers/{customerId}/addresses |
update_addresses | PUT | /api/v1/customers/{customerId}/addresses/{addressId} |
delete_addresses | DELETE | /api/v1/customers/{customerId}/addresses/{addressId} |
customer_groups_list | GET | /api/v1/customer-groups |
customer_groups_create | POST | /api/v1/customer-groups |
customer_groups_update | PUT | /api/v1/customer-groups/{id} |
customer_groups_delete | DELETE | /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 URI | Description |
|---|---|
linkit://docs/swagger.json | The published OpenAPI specification (JSON) — the same document as /docs/swagger.json |
linkit://docs/api-overview | API overview with auth, pagination, and resources |
linkit://docs/tool-catalog | Every 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:
- Generates its tools from the published OpenAPI specification
- Authorizes every tool call for the calling user and organization
- Proxies the call as an HTTP request to the same Linkit REST API
- 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/pingAuthentication 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.