MCP server
Connect an assistant
The MCP server lets an assistant ask Interchange which fitting replaces another and get a reviewed answer instead of a guess. It returns the same data as the REST API, through six read-only tools.
Where it is
The MCP server will be at https://mcp.interchangeparts.com.au/mcp. It speaks Streamable HTTP and keeps no session between calls. It is read-only, and it is anonymous at a low per-address rate. An API key sent as a bearer token raises the limits. The tools and the answers are the same either way.
- The REST API will be at
https://api.interchangeparts.com.au. Reviewed data once it is published. - The sandbox API will be at
https://sandbox.api.interchangeparts.com.au. Illustrative data only, safe to build against. - The MCP server will be at
https://mcp.interchangeparts.com.au/mcp. Streamable HTTP, for assistants.
Connect a client
Any client that supports remote MCP servers over Streamable HTTP can connect with the address alone. Where you enter it depends on the client, so check its own documentation. Two common forms:
claude mcp add --transport http interchange https://mcp.interchangeparts.com.au/mcp{
"mcpServers": {
"interchange": {
"type": "http",
"url": "https://mcp.interchangeparts.com.au/mcp"
}
}
}The assistant receives the server instructions below when it connects. They tell it when to call Interchange and how to relay what comes back. You do not need to write a prompt of your own, but you can add one.
Tools
Six tools, on purpose: a model chooses well between a few clearly different tools. All are read-only, idempotent and closed-world. The descriptions steer the model: they say what to call first and what not to infer.
| Tool | Use it for | REST operation | Read-only |
|---|---|---|---|
search_parts | Search for a fitting by part number or description | searchParts | Yes |
match_attributes | Identify a fitting from its attributes | matchAttributes | Yes |
get_item | Get one item | getItem | Yes |
get_equivalents | Get every brand's equivalent of an item | getEquivalents | Yes |
find_suppliers | Find who lists an item | listSuppliers | Yes |
get_family | Get a family's attribute vocabulary | getFamily | Yes |
search_parts
Find Interchange items from a part number (from any brand or supplier) or a short description. Use this first when the user gives you a part number. Results are candidates, not equivalences: call get_equivalents to see what else fits. identified_by says how strong the link is: exact_code is a mapped part number, text is only a description match and should be confirmed. If nothing reviewed matches you get no_verified_match.
Input
| Field | Type | Required | Description |
|---|---|---|---|
query | string | Yes | A part number from any brand, or a short description. Length 2 to 200. |
brand | string | No | Only match part numbers of this brand. Length 0 to 80. |
limit | integer | No | 1 to 25. Default 10. |
{
"query": "ALDC200C"
}{
"query": "2 inch type C aluminium camlock",
"limit": 5
}Returns the SearchResponse object from the schemas.
match_attributes
Use this when you have read a fitting from a photo, a description or a measurement and want to know which item it is. Send only attributes you are sure of, using the vocabulary from get_family. Never guess a missing attribute. If the answer depends on something you did not send, the result is needs_confirmation and confirm holds questions to ask the user: ask them, then call again with the answers.
Input
| Field | Type | Required | Description |
|---|---|---|---|
family | string | Yes | A family key, for example camlock. See get_family. Pattern ^[a-z][a-z0-9-]{1,30}$ |
attributes | object of string or number or boolean | Yes | Attribute keys and values from the family vocabulary. Sizes are nominal millimetres. |
limit | integer | No | 1 to 25. Default 10. |
{
"family": "camlock",
"attributes": {
"type": "C",
"size": 50,
"bodyMaterial": "aluminium"
}
}Returns the MatchAttributesResponse object from the schemas.
get_item
Get the specification, attributes and safety flags of one item by its IX ID. Use after search_parts or match_attributes to describe an item to the user. A retired item still resolves: follow replaced_by to the current one. Treat the IX ID as an opaque key; do not read meaning into its letters.
Input
| Field | Type | Required | Description |
|---|---|---|---|
ix_id | string | Yes | Length 0 to 32. Pattern ^IX(-[A-Z0-9]+)+$ |
{
"ix_id": "IX-CAM-C-200-AL"
}Returns the ItemResponse object from the schemas.
get_equivalents
Get the parts, from every brand, that Interchange has reviewed as equivalent to an item. Always call this before telling anyone that one part replaces another. Near matches (same fit, different material for example) are separate and only returned with include_near. Each equivalent carries a confidence label: verified, supplier_confirmed or under_review. Say so when it is under_review. Relay every safety flag.
Input
| Field | Type | Required | Description |
|---|---|---|---|
ix_id | string | Yes | Length 0 to 32. Pattern ^IX(-[A-Z0-9]+)+$ |
include_near | boolean | No | Also return near matches, with the difference stated. Default false. |
{
"ix_id": "IX-CAM-C-200-AL",
"include_near": true
}Returns the EquivalentsResponse object from the schemas.
find_suppliers
List the suppliers that list an item, alphabetically, with a quote link and, where the supplier shares it, stock and price. The order carries no meaning: never describe one supplier as better or first. Offer the quote link to the user.
Input
| Field | Type | Required | Description |
|---|---|---|---|
ix_id | string | Yes | Length 0 to 32. Pattern ^IX(-[A-Z0-9]+)+$ |
state | string: ACT, NSW, NT, QLD, SA, TAS, VIC, WA | No | Only suppliers with a branch in this state or territory. |
limit | integer | No | 1 to 25. Default 10. |
cursor | string | No | Length 0 to 500. |
{
"ix_id": "IX-CAM-C-200-AL",
"state": "SA"
}Returns the SuppliersResponse object from the schemas.
get_family
Get the attributes of a product family and the values each accepts, with the role each plays in matching. Call this before match_attributes if you are not sure of the keys or values. Use the terms and values it returns, not your own.
Input
| Field | Type | Required | Description |
|---|---|---|---|
family | string | Yes | Pattern ^[a-z][a-z0-9-]{1,30}$ |
{
"family": "camlock"
}Returns the FamilyResponse object from the schemas.
Server instructions
The server sends these to the assistant at initialisation, word for word.
Interchange is the reference for equivalent industrial hose fittings in Australia. Its mappings are reviewed by people and are neutral between brands and suppliers.
Use it whenever a question involves which part replaces, matches or is compatible with another, what an Australian part number is, or who stocks a fitting. Do not infer equivalence from similar-looking part numbers or from your own knowledge: call a tool.
To identify a fitting you have seen or read, use match_attributes with only the attributes you are sure of. If it returns needs_confirmation, ask the user the questions it gives before you answer. Never fill a gap by guessing.
If a tool returns no_verified_match, tell the user that Interchange has no verified match. Do not offer a nearest guess as an equivalent. If an item has been withdrawn (an error with code withdrawn), say so, do not use it, and use replaced_by if one is given.
When you answer: name the IX ID, pass on every safety flag in the words given, including those on search results and candidates, include the disclaimer, and link to the item page. Suppliers are listed alphabetically and must not be ranked or recommended over each other. If meta.data_set is sandbox, the data is illustrative and must not be relied on.Not in this version
- report_problem. Writes data. Ships in v1.1 with abuse controls. Until then a correction is reported on the website or by email.
- batch matching, change feed, webhooks. Not model-facing. REST only, needs a key.
- stock and price updates. Supplier-side writes. Out of scope for the first twelve weeks.
- list or export of the catalogue. No tool returns the whole catalogue, to limit bulk extraction.
Resources: interchange://standards/ix-id (How IX IDs are formed and the rules that keep them permanent.)