Skip to content

MCP tools

This content is not available in your language yet.

This behaviour is changing. As of: 2026-09-02. Current commercial details: uely.ch/preise.

Everything is on one endpoint: https://api.uely.ch/mcp.

These answer for anyone. They read published data or start a signup; none of them touches a private workspace.

ToolWhat it does
search_listingsSearch the public marketplace
get_listingOne published listing
get_farm_profileA farm’s public page
search_handbookFull-text search of this handbook — title, description and page text
get_handbook_pageOne handbook page
get_signup_infoPlans and prices, and the rule about never asking for a card
start_signupOpen a Stripe Checkout for someone with no account
get_signup_sessionPoll a signup — statuses only
ToolScope
askask
researchresearch
get_research_statusresearch
list_documents, get_documentdocuments.read
upload_training, get_training_statustraining.write
list_contacts, get_contactcontacts.read
list_places, get_placeplaces.read
list_work_items, get_work_itemwork_items.read
list_listings, open_listinglistings.read
list_animals, get_animalanimals.read
list_letters, get_letterletters.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.

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.

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.

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.