MCP tools
Questi contenuti non sono ancora disponibili nella tua lingua.
Questo comportamento sta cambiando. Aggiornato: 2026-09-02. Dettagli commerciali attuali: uely.ch/preise.
Everything is on one endpoint: https://api.uely.ch/mcp.
Public — no token
Abschnitt betitelt „Public — no token“These answer for anyone. They read published data or start a signup; none of them touches a private workspace.
| Tool | What it does |
|---|---|
search_listings | Search the public marketplace |
get_listing | One published listing |
get_farm_profile | A farm’s public page |
search_handbook | Full-text search of this handbook — title, description and page text |
get_handbook_page | One handbook page |
get_signup_info | Plans and prices, and the rule about never asking for a card |
start_signup | Open a Stripe Checkout for someone with no account |
get_signup_session | Poll a signup — statuses only |
Scoped — token plus a paid plan
Abschnitt betitelt „Scoped — token plus a paid plan“| Tool | Scope |
|---|---|
ask | ask |
research | research |
get_research_status | research |
list_documents, get_document | documents.read |
upload_training, get_training_status | training.write |
list_contacts, get_contact | contacts.read |
list_places, get_place | places.read |
list_work_items, get_work_item | work_items.read |
list_listings, open_listing | listings.read |
list_animals, get_animal | animals.read |
list_letters, get_letter | letters.read |
open_listing is deliberately a different verb from the public get_listing. The public one
returns what is already on a public page; open_listing reaches the farm’s own inventory,
including listings they have not published.
Every scoped tool acts inside one personal workspace — the one belonging to the person who consented. There is no parameter that selects a different one, and a token cannot see a team space it was not granted.
List tools page with limit and offset. The default is 25 and the ceiling is 50; asking for
more returns 50 rather than an error. Responses carry items, limit, offset and total.
ask runs the same service as POST /chat/ask: German answers, workspace and knowledge-base
reads only, no code execution, no browsing.
It is charged per call, and an MCP tools/call carries no idempotency key — a retry is a
second question and a second charge. If you need retries to be free, use
the REST route with an Idempotency-Key.
Each ask also lands in the person’s chat history, marked as coming from your client. They can
see what you asked.
research
Abschnitt betitelt „research“A written report answering from Uely’s agricultural knowledge base — research findings, official guidance and cantonal practice for Swiss agriculture, in German, French and Italian, including material that general web search does not reach because it sits in PDFs on cantonal sites rather than on the open web.
It reads no workspace. The run’s toolset contains no verb that could, and the run carries
no workspace identifier for one to resolve against. Use ask for questions about a farm’s own
data, and research for questions about the subject matter.
Ask in any language; the report comes back in German with its sources. A specific question earns a better report than a topic — name the crop, animal, canton or regulation.
Returns a job_id, not a report. A report reads a large corpus and takes one to several
minutes; poll get_research_status with that id until status is succeeded.
Charged per call like ask, and an MCP tools/call carries no idempotency key, so a retry is
a second report and a second charge. Use POST /research with an
Idempotency-Key if you need retries to be free.
get_research_status
Abschnitt betitelt „get_research_status“Takes the job_id that research returned. Answers queued, running, succeeded or
failed; a succeeded job carries the report and its citations, a failed one carries
error.
Polling is free — only starting a report is charged. Leave a moment between calls.
upload_training
Abschnitt betitelt „upload_training“Takes file_name and content, returns 202 with an upload_id and a poll path. Ingest is
asynchronous; poll get_training_status or GET /training/{id}.
Text only, and capped — send the extracted text, not a PDF.
Uploads are stamped with your client_id, and the person sees in their sources list that a
program added them.
A tool that fails for a reason you can act on says so. Anything else is a generic message plus a server-side log — production never returns internals. A tool name that does not exist, and one that exists but is unclassified, are both refused: the classification is default-deny, so a new tool is unreachable rather than accidentally public.