Satmarin publishes its maritime VSAT parts catalog to AI agents over the Model Context Protocol (MCP). An agent can search for a part, check whether it fits a given antenna model, resolve a discontinued part to its current replacement, and submit a quote request.
Endpoint
- URL: https://satmarin.com/mcp
- Transport: streamable-http, JSON-RPC 2.0 over POST
- Protocol version: 2025-06-18. Stateless, no session identifiers.
- Methods: initialize, ping, tools/list, tools/call. A GET returns 405.
- Authentication: none. Read tools are open to any client.
- Server metadata: https://satmarin.com/.well-known/mcp/server.json
Tools
search_parts
Find a part by part number, model or free text. Matching runs in order: exact part number, part-number prefix, title, then description, and the response says which matched.
input: { "query": string, "brand": string?, "model": string?,
"part_type": string?, "limit": integer? } // limit default 10, max 25
output: { "results": [ { "sku", "product_id", "title", "brand", "part_type",
"compatible_models": [string], "price", "eol": bool,
"superseded_by": [string], "url" } ],
"total": integer, "match": "exact_sku" | "prefix" | "text" }
check_compatibility
Answer whether a part fits an antenna model, from the catalog fitment data only. The answer is false only when the part has fitment data that does not list the model. A part with no fitment data returns unknown, never a guess.
input: { "sku": string, "product_id": integer?, "antenna_model": string }
output: { "sku", "antenna_model", "compatible": true | false | "unknown",
"basis": "model_subcategory" | "no_fitment_data", "url" }
resolve_supersession
Is a part discontinued, and what replaces it? The replacement chain is followed to the latest live product. A discontinued part with no live successor returns no_replacement true rather than a substitute.
input: { "sku": string, "product_id": integer? }
output: { "sku", "eol": bool,
"successors": [ { "sku", "title", "url" } ],
"supersedes": [ { "sku", "title", "url" } ],
"no_replacement": bool }
get_quote
Submit a quote request for one or more catalog parts. The call returns a reference immediately. A person reviews every request and replies within one working day.
Nothing is emailed to the requester by this call. No acknowledgement, no marketing, no automated message of any kind is sent to the address supplied. The address is used only so that the reply can reach the right person.
input: { "items": [ { "sku": string, "qty": integer } ], // 1 to 20 lines, qty 1 or more
"contact": { "company": string, "name": string, "email": string,
"phone": string?, "vessel": string? },
"notes": string? } // up to 1000 characters
output: { "reference": "SM-YYYYMMDD-XXXX", "status": "received", "message": string }
Every part number must resolve to a live, quotable product. Discontinued parts are refused, with a pointer to resolve_supersession for the replacement.
Limits
- Reads: 60 calls per minute per client address.
- Quote requests: 10 per hour per client address, counted separately.
- Over either limit the server returns JSON-RPC error -32029 with a retry_after value in seconds.
How the data behaves
- Prices are EUR, ex works, VAT excluded. A discontinued part has a null price.
- Anything unknown is returned as null. Values are never inferred to fill a gap.
- URLs are real catalog URLs, returned from the catalog, never constructed.
- Compatibility comes only from the recorded fitment data.
Try it
List the tools:
curl -s https://satmarin.com/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Search for a part number:
curl -s https://satmarin.com/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"search_parts","arguments":{"query":"S2-0817_B"}}}'
Questions
Write to [email protected].
