Dearborn MI switch swap and repatch visits for MSPs; remote signoff; proposal by email
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Place an order on terms you have inspected and the buyer has authorized you to accept. Requires the exact terms hash and explicit acceptance. Follow inspect_offer later for payment links and verified payment state.
The request or offer id from your receipt or customer link
Private token from your receipt or customer link; keep it for later visits
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http linklamp https://linklamp.meetinggrove.com/mcp
Tool list last changed Nov 9, 2026.
Place an order on terms you have inspected and the buyer has authorized you to accept. Requires the exact terms hash and explicit acceptance. Follow inspect_offer later for payment links and verified payment state.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name* | string | |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| accept* | boolean | |
| organization | string | |
| terms_sha256* | string | |
| purchase_order | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"accept",
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"accept": {
"type": "boolean",
"const": true
},
"organization": {
"type": "string",
"maxLength": 160
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"purchase_order": {
"type": "string",
"maxLength": 80
}
}
}Accept or decline a remedy the business proposed on a placed order (inspect_offer thread.fulfilment.remedies with state PROPOSED). Recorded for the business, which applies it and shows the result there. Accepting a credit or refund here moves no money; the business records it when its payment processor does.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name* | string | Name of the person making this for the buyer |
| note | string | |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| answer* | string | |
| remedy_id* | string | |
| terms_sha256* | string | Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"remedy_id",
"answer",
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Name of the person making this for the buyer"
},
"note": {
"type": "string",
"maxLength": 1000
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"answer": {
"enum": [
"ACCEPT",
"DECLINE"
],
"type": "string"
},
"remedy_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since"
}
}
}Resume an appointment request: read provider-confirmed state, preferred windows and history.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
}
}
}Cancel this appointment request using its private credentials.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| reason | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"reason": {
"type": "string",
"maxLength": 500
}
}
}Times a provider has published, if any. With none, ask for an appointment with preferred windows.
| Argument | Type | Description |
|---|---|---|
| to | string | |
| from | string | |
| service* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"service"
],
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
},
"service": {
"enum": [
"closet-visit"
],
"type": "string"
}
}
}Propose a change to an issued offer on its inspected terms: other quantities (by item index in terms.items), another list of companies (where the items price companies), a delivery date, a total price for the whole, a payment plan, or a note. It is a proposal, not a change: the terms stand and can still be accepted as they are. The business answers it in inspect_offer thread.counteroffers, with a revised offer to inspect and accept, or a reason. A later proposal replaces an earlier one still awaiting an answer. Nothing here orders or pays.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name* | string | Name of the person making this for the buyer |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| proposal* | object | At least one of quantities, counterparties, deliver_by, total_minor, payment or note |
| organization | string | The buyer's organization |
| terms_sha256* | string | Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"proposal",
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Name of the person making this for the buyer"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"proposal": {
"type": "object",
"properties": {
"note": {
"type": "string",
"maxLength": 1000
},
"payment": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"CHECKOUT_FULL",
"INVOICE"
],
"type": "string"
},
"days_until_due": {
"type": "integer",
"maximum": 90,
"minimum": 0
}
}
},
"deliver_by": {
"type": "string",
"maxLength": 40,
"description": "ISO date, such as 2027-01-15"
},
"quantities": {
"type": "array",
"items": {
"type": "object",
"required": [
"item",
"quantity"
],
"properties": {
"item": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "0-based index into terms.items"
},
"quantity": {
"type": "number",
"exclusiveMinimum": 0
}
}
},
"maxItems": 40,
"minItems": 1
},
"total_minor": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The total the buyer proposes for the whole, in minor units of the offer currency",
"exclusiveMinimum": 0
},
"counterparties": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 160,
"minLength": 2
},
"country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166 two-letter code"
},
"identifier": {
"type": "string",
"maxLength": 40,
"description": "An LEI, CIK or registry number, if known"
}
}
},
"maxItems": 25,
"minItems": 1,
"description": "The companies the order should cover instead, for an offer whose items price companies"
}
},
"description": "At least one of quantities, counterparties, deliver_by, total_minor, payment or note"
},
"organization": {
"type": "string",
"maxLength": 160,
"description": "The buyer's organization"
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since"
}
}
}Decline an issued offer on its inspected terms.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| reason | string | |
| terms_sha256* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"reason": {
"type": "string",
"maxLength": 500
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
}
}What Linklamp does (Switch swap or repatch visit in Dearborn, MI, under your remote engineer: Describe a Dearborn switch swap or repatch; Linklamp drafts the visit scope and emails a proposal with visit duties, exclusions, price and a proposed time.), what happens to a request, what you receive, its scope, and the request fields with examples.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Set fields by name ({"op":"set","values":{...}}, an empty value clears) or change the list ({"op":"add"|"update"|"remove"|"replace", ...}), exactly as given: no reading. Use it to answer the open question when the answer is a value.
| Argument | Type | Description |
|---|---|---|
| id* | string | The requirement id from an earlier answer |
| ops* | array | |
| op_id | string | |
| token* | string | Its private token (also the receipt token of the request it is sent as); keep it private |
| base_revision | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"ops"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The requirement id from an earlier answer"
},
"ops": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxItems": 30,
"minItems": 1
},
"op_id": {
"type": "string",
"maxLength": 80
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Its private token (also the receipt token of the request it is sent as); keep it private"
},
"base_revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
}
}A Linklamp requirement as it stands: each value with where it came from, what it replaced, the open question, words not yet read, whether it was sent and any offer on it.
| Argument | Type | Description |
|---|---|---|
| id* | string | The requirement id from an earlier answer |
| token* | string | Its private token (also the receipt token of the request it is sent as); keep it private |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The requirement id from an earlier answer"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Its private token (also the receipt token of the request it is sent as); keep it private"
}
}
}Record the buyer's inspection of a placed order: for each item (its index in terms.items) the quantity accepted and the quantity rejected, with a reason for a rejection, optionally for one portion of the order. Whether it was accepted is computed: only when nothing is rejected. Recorded for the business, which answers a rejection in inspect_offer thread.fulfilment, with a proposed remedy. Nothing here pays or refunds.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name* | string | Name of the person making this for the buyer |
| note | string | |
| lines* | array | |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| portion | string | The portion inspected, as thread.fulfilment.portions names it |
| terms_sha256* | string | Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"lines",
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Name of the person making this for the buyer"
},
"note": {
"type": "string",
"maxLength": 1000
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"item",
"accepted_quantity",
"rejected_quantity"
],
"properties": {
"item": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "0-based index into terms.items"
},
"reason": {
"type": "string",
"maxLength": 300
},
"accepted_quantity": {
"type": "number",
"minimum": 0
},
"rejected_quantity": {
"type": "number",
"minimum": 0
}
}
},
"maxItems": 40,
"minItems": 1
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"portion": {
"type": "string",
"maxLength": 40,
"description": "The portion inspected, as thread.fulfilment.portions names it"
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since"
}
}
}Read the exact authorized terms, terms hash, order state and processor payment links, and the thread the business published on the offer: its answers to counteroffers (thread.counteroffers), the purchasing requirements, vendor status and purchase order matches it holds (thread.purchasing), and the portions, shortfall and remedies of delivery (thread.fulfilment). Use the offer link credentials, or credentials of the request explicitly linked to this offer.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
}
}
}Give Linklamp the buyer's requirement, or a correction or addition to it, in their own words: it is read into a structured requirement (each value says which words it came from), conflicting or unclear facts come back as one question, and words not yet read are kept as written. Pass the requirement (id, token) from the first answer to continue it. Nothing is sent or ordered: send_requirement sends it when the buyer says so. When you already have the fields in structured form, use submit_request instead.
| Argument | Type | Description |
|---|---|---|
| turn_id | string | Your id for this message: a retry with the same id is applied once |
| timezone | string | The buyer's IANA time zone, for reading dates |
| utterance* | string | The buyer's words, as written |
| requirement | object | The requirement to continue |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"utterance"
],
"properties": {
"turn_id": {
"type": "string",
"maxLength": 80,
"description": "Your id for this message: a retry with the same id is applied once"
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "The buyer's IANA time zone, for reading dates"
},
"utterance": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "The buyer's words, as written"
},
"requirement": {
"type": "object",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The requirement id from an earlier answer"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Its private token (also the receipt token of the request it is sent as); keep it private"
}
},
"description": "The requirement to continue"
}
}
}Confirm a payment condition only where the inspected order allows the customer to release it. This records approval; it does not pay the processor.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name | string | |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| confirm* | boolean | |
| payment* | string | |
| terms_sha256* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"payment",
"confirm"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"confirm": {
"type": "boolean",
"const": true
},
"payment": {
"type": "string",
"maxLength": 100
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
}
}Report the seller's vendor standing with the buyer's organization (APPROVED, DOCUMENTS_REQUESTED or REJECTED) with the buyer's approval or case reference and any documents requested. Recorded as the buyer's own statement; the business answers it in inspect_offer thread.purchasing.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name* | string | Name of the person making this for the buyer |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| status* | string | |
| reference* | string | The buyer's approval or case reference |
| organization* | string | The buyer's organization |
| terms_sha256* | string | Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since |
| buyer_vendor_id | string | |
| documents_requested | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"status",
"reference",
"name",
"organization"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Name of the person making this for the buyer"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"status": {
"enum": [
"APPROVED",
"DOCUMENTS_REQUESTED",
"REJECTED"
],
"type": "string"
},
"reference": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "The buyer's approval or case reference"
},
"organization": {
"type": "string",
"maxLength": 160,
"minLength": 2,
"description": "The buyer's organization"
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since"
},
"buyer_vendor_id": {
"type": "string",
"maxLength": 80
},
"documents_requested": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 12
}
}
}Ask for an appointment at preferred windows (or hold a published time). It is a request until the provider confirms; the answer carries a status link.
| Argument | Type | Description |
|---|---|---|
| need* | string | |
| contact | object | |
| minutes | integer | |
| service* | string | |
| slot_id | string | |
| timezone* | string | |
| geography | object | |
| preferred | array | |
| client_key* | string | |
| specifications | object |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"service",
"need",
"timezone",
"client_key"
],
"properties": {
"need": {
"type": "string",
"maxLength": 2000
},
"contact": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"organization": {
"type": "string"
}
}
},
"minutes": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"service": {
"enum": [
"closet-visit"
],
"type": "string"
},
"slot_id": {
"type": "string"
},
"timezone": {
"type": "string"
},
"geography": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"preferred": {
"type": "array",
"items": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string"
},
"start": {
"type": "string"
}
}
},
"maxItems": 6
},
"client_key": {
"type": "string",
"maxLength": 80,
"minLength": 8
},
"specifications": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}Resume a requirement using the receipt credentials. Read the recorded requirement and any linked offers. Contact details are kept apart.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
}
}
}Request new windows. An existing confirmed time stands until a provider confirms a replacement.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| preferred* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"preferred"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"preferred": {
"type": "array",
"items": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string"
},
"start": {
"type": "string"
}
}
},
"maxItems": 6,
"minItems": 1
}
}
}Retrieve what a paid order delivers, where the business produces it itself (a report): the exact text, its SHA-256, version, sources and any shortfall. Before payment is confirmed it says it is not yet available. Use the offer link or linked request credentials.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
}
}
}Send the requirement to Linklamp once the buyer says to: the first send records the request (its receipt token is the requirement's token, for request_status and offers); a later send of a changed requirement records a revision of the same request. Name the revision the buyer saw. This orders nothing: an offer comes later and is accepted separately on its exact terms.
| Argument | Type | Description |
|---|---|---|
| id* | string | The requirement id from an earlier answer |
| op_id | string | |
| token* | string | Its private token (also the receipt token of the request it is sent as); keep it private |
| action | string | What the buyer wants done (default quote): to buy, lease, verify... |
| contact | object | |
| revision* | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"revision"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The requirement id from an earlier answer"
},
"op_id": {
"type": "string",
"maxLength": 80
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Its private token (also the receipt token of the request it is sent as); keep it private"
},
"action": {
"enum": [
"buy",
"source",
"quote",
"verify",
"lease",
"license",
"hire",
"retrieve",
"convert",
"other"
],
"type": "string",
"description": "What the buyer wants done (default quote): to buy, lease, verify..."
},
"contact": {
"type": "object",
"required": [
"email"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"email": {
"type": "string",
"maxLength": 200
},
"organization": {
"type": "string",
"maxLength": 160
}
}
},
"revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
}
}Tell the business how the buyer's purchasing works for this offer: whether the seller must be an approved vendor, whether a purchase order is required, which documents are needed, the seller's vendor id with the buyer, where orders and invoices go, and the payment terms. Recorded as the buyer's statement; the business answers it in inspect_offer thread.purchasing. Nothing here orders or pays.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| name* | string | Name of the person making this for the buyer |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| organization* | string | The buyer's organization, whose purchasing this is |
| requirements* | object | |
| terms_sha256* | string | Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"requirements",
"name",
"organization"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Name of the person making this for the buyer"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"organization": {
"type": "string",
"maxLength": 160,
"minLength": 2,
"description": "The buyer's organization, whose purchasing this is"
},
"requirements": {
"type": "object",
"required": [
"vendor_approval_required",
"purchase_order_required",
"documents_required"
],
"properties": {
"note": {
"type": "string",
"maxLength": 1000
},
"route": {
"type": "string",
"maxLength": 300,
"description": "How the buyer's purchasing takes orders and invoices: a portal URL, email or API"
},
"buyer_vendor_id": {
"type": "string",
"maxLength": 80
},
"documents_required": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 12,
"description": "Documents the buyer's purchasing needs from the seller, such as a W-9 or an insurance certificate"
},
"payment_terms_days": {
"type": "integer",
"maximum": 120,
"minimum": 0
},
"purchase_order_required": {
"type": "boolean"
},
"vendor_approval_required": {
"type": "boolean"
}
}
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since"
}
}
}Send the buyer's purchase order for an issued offer or a placed order: number, revision, lines, total, currency and payment terms. It is matched against the accepted terms; differences are recorded and shown in inspect_offer thread.purchasing as exceptions, never silently accepted. A changed purchase order is the same number with a higher revision. This does not accept the offer and pays nothing.
| Argument | Type | Description |
|---|---|---|
| id* | string | The request or offer id from your receipt or customer link |
| po* | object | |
| name* | string | Name of the person making this for the buyer |
| token* | string | Private token from your receipt or customer link; keep it for later visits |
| organization | string | The buyer's organization |
| terms_sha256* | string | Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"token",
"terms_sha256",
"po",
"name"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The request or offer id from your receipt or customer link"
},
"po": {
"type": "object",
"required": [
"number",
"lines",
"total_minor",
"currency",
"payment_terms_days"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"description",
"quantity",
"unit_price_minor",
"amount_minor"
],
"properties": {
"quantity": {
"type": "number",
"minimum": 0
},
"description": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"amount_minor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "quantity times unit_price_minor"
},
"unit_price_minor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
}
},
"maxItems": 40,
"minItems": 1
},
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9._/-]{1,60}$"
},
"bill_to": {
"type": "string",
"maxLength": 300
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "1 unless this replaces an earlier revision"
},
"total_minor": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"invoice_route": {
"type": "string",
"maxLength": 300,
"description": "Where invoices go: a portal URL, email or API"
},
"buyer_vendor_id": {
"type": "string",
"maxLength": 80,
"description": "The seller's vendor id in the buyer's system"
},
"document_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "SHA-256 of the purchase order document, if there is one"
},
"payment_terms_days": {
"type": "integer",
"maximum": 120,
"minimum": 0
}
}
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "Name of the person making this for the buyer"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$",
"description": "Private token from your receipt or customer link; keep it for later visits"
},
"organization": {
"type": "string",
"maxLength": 160,
"description": "The buyer's organization"
},
"terms_sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Exact terms_sha256 from inspect_offer; the act is refused if the terms have changed since"
}
}
}Send Linklamp a requirement (Switch swap or repatch visit in Dearborn, MI, under your remote engineer). The request is recorded with a reference at once. Linklamp reads the scope, open questions and any words kept as written, then prices and schedules the visit and emails a proposal: visit duties, exclusions, price and a proposed time inside the client's window. Without an email address the request is still recorded, reply_by_email is listed in missing_specifications, and no proposal can be sent until an address is given in a continuation. Nothing is ordered, booked or committed until the buyer agrees terms; a time is confirmed only on the appointment status page, after a provider confirms it. Contact details are kept apart from the requirement, while we correspond or do business and for 24 months after, so a later request picks up where it left off; ask us to delete them at any time. It is answered with a receipt: keep its id and token to read its status (request_status), to add details later (continuation) and to act on an offer made in reply. A requirement is not an order and costs nothing.
| Argument | Type | Description |
|---|---|---|
| need* | string | The requirement in the buyer's own words |
| action | string | |
| budget | object | |
| timing | object | |
| contact | object | |
| quantity | object | |
| geography | object | |
| continuation | object | The receipt id and token of an earlier request, to add to it instead of opening a new one |
| specifications | object | Fields from the request_schema describe_business returns |
| requested_fields | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"need"
],
"properties": {
"need": {
"type": "string",
"maxLength": 2000,
"description": "The requirement in the buyer's own words"
},
"action": {
"enum": [
"buy",
"source",
"quote",
"verify",
"lease",
"license",
"hire",
"retrieve",
"convert",
"other"
],
"type": "string"
},
"budget": {
"type": "object",
"required": [
"amount"
],
"properties": {
"per": {
"type": "string"
},
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
}
},
"timing": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"latest": {
"type": "string"
},
"earliest": {
"type": "string"
},
"recurrence": {
"type": "string"
}
}
},
"contact": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"organization": {
"type": "string"
}
}
},
"quantity": {
"type": "object",
"required": [
"amount",
"unit"
],
"properties": {
"per": {
"type": "string"
},
"unit": {
"type": "string"
},
"amount": {
"type": "number"
}
}
},
"geography": {
"type": "object",
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
},
"text": {
"type": "string"
},
"country": {
"type": "string"
}
}
},
"continuation": {
"type": "object",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"token": {
"type": "string",
"pattern": "^[0-9a-f]{48}$"
}
},
"description": "The receipt id and token of an earlier request, to add to it instead of opening a new one"
},
"specifications": {
"type": "object",
"description": "Fields from the request_schema describe_business returns",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"requested_fields": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 30
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
What changed in this server's tools since we started watching, newest first. Each change is scanned again.
Send the requirement to Linklamp once the buyer says to: the first send records the request (its receipt token is the requirement's token, for request_status and offers); a later send of a changed requirement records a revision of the same request. Name the revision the buyer saw. This orders nothing: an offer comes later and is accepted separately on its exact terms.
Set fields by name ({"op":"set","values":{...}}, an empty value clears) or change the list ({"op":"add"|"update"|"remove"|"replace", ...}), exactly as given: no reading. Use it to answer the open question when the answer is a value.
A Linklamp requirement as it stands: each value with where it came from, what it replaced, the open question, words not yet read, whether it was sent and any offer on it.
Give Linklamp the buyer's requirement, or a correction or addition to it, in their own words: it is read into a structured requirement (each value says which words it came from), conflicting or unclear facts come back as one question, and words not yet read are kept as written. Pass the requirement (id, token) from the first answer to continue it. Nothing is sent or ordered: send_requirement sends it when the buyer says so. When you already have the fields in structured form, use submit_request instead.