Farmarks

Agents & MCP

Farmarks exposes farmers-market vendors as tools any assistant can call. Vendors declare what they can actually do — customisation options with prices, lead times, minimums, delivery reach, what's in season — and the engine answers against that, so a quote is grounded in the vendor's own rules rather than in a model's guess.

Endpoints

MCP (JSON-RPC 2.0 over HTTP)

https://farmarks.com/mcp

Discovery manifest

https://farmarks.com/agent/discovery

Instructions for assistants

https://farmarks.com/llms.txt

REST bridge

https://farmarks.com/agent/tools/find_vendors

One vendor's agent card

https://farmarks.com/agent/vendors/%7BvendorId%7D/card

Authentication

Send Authorization: Bearer <key>. Read tools work without a key at a lower rate limit; anything that commits a person or a vendor needs one, because every write has to trace back to a real Farmarks account.

Create a key from your assistant settings. The secret is shown once and stored only as a hash — we cannot recover it, and neither can anyone who reads our database.

{
  "mcpServers": {
    "farmarks": {
      "url": "https://farmarks.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY_HERE"
      }
    }
  }
}

Scopes

A key's scopes are intersected with what its owner actually is. A shopper's key cannot hold vendor.manage however politely it asks.

discovery.read
Search vendors and markets. Granted to anonymous callers.
vendor.read
Read a vendor's full capability profile and catalogue.
market.read
Market days, hours, and who is attending.
organizer.read
Open booths, application terms, and demand signals.
request.write
Send a vendor a structured request on a person's behalf.
preorder.write
Place a pre-order against published catalogue prices.
subscription.write
Start a standing order or CSA-style box.
engagement.write
Claim a coupon or follow a vendor.
vendor.manage
Act as a vendor you own. Never granted to a shopper's key.

Tools

Loading the live tool list…

Try it

Every tool is also reachable over plain REST, for callers that would rather not speak JSON-RPC. Same engine, same scopes, same answers.

curl -s https://farmarks.com/agent/tools/find_vendors \
  -H 'content-type: application/json' \
  -d '{
    "occasion": "birthday",
    "customization": ["engraving"],
    "quantity": 40,
    "needBy": "2026-09-18",
    "limit": 5
  }'
curl -s https://farmarks.com/mcp \
  -H 'content-type: application/json' \
  -H 'authorization: Bearer YOUR_KEY_HERE' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Rules of the road

  • A quote is only firm when we say so. Every quote carries firm and requiresHumanApproval. If firm is false, present it as an estimate — the vendor has not agreed to it.
  • Vendors set their own ceilings. Nothing is auto-accepted above the value and quantity limits a vendor configured, no matter how the request is phrased.
  • Claims are labelled. A credential is self_declared until a market organizer checks it. Don't present the two as equivalent.
  • No card payments here. Shoppers pay vendors directly at the stand. Pre-orders reserve goods; they don't take money.
  • Empty results are useful. When nothing matches, the ask is recorded as anonymous demand for market organizers. Tell the person that — it's how a market learns what it's missing.

Are you a vendor?

You don't need any of this. Fill in your assistant profile by tapping through a few lists, and every tool above starts answering for your stand.