{"name":"io.github.bartek-filipiuk/intent-hub","slug":"bartek-filipiuk-intent-hub","title":null,"description":"Book a local business by saying what you need; matching businesses bid and you confirm one.","url":"https://mcp.market/server/bartek-filipiuk-intent-hub","rating":null,"grade":"D","score":53,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T20:15:42.674Z","last_ok_at":"2026-09-19T20:15:42.674Z","latency_ms":1831},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/bartek-filipiuk/intent-hub","website":"https://openintentprotocol.com","version":"0.1.0","remotes":[{"type":"streamable-http","url":"https://openintentprotocol.com/mcp"}],"packages":[],"tools":[{"name":"cancel_booking","description":"Release a held or confirmed slot of this session, so the slot is free again. Businesses that host their own agent do not offer this yet and answer `not-supported`.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"session":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The session id the hold was made in."},"hold":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The `id` of the hold to release."}},"required":["session","hold"],"additionalProperties":false}},{"name":"capabilities","description":"What this hub can do, in one call: every tool by name, every resource by URI, every prompt by name, the per-client budgets, how to authenticate, the protocol revision and where the documentation is. Takes no arguments, spends no budget and reads nothing: it answers the hub's own constants, so a client that asks it first never has to guess. Called with a key it also answers who that key is.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"confirm_booking","description":"Confirm a held slot with the customer's name and phone number; this is the booking. Idempotent: confirming the same hold twice books it once and tells the business once. With a linked number (link_phone) you may send `contact` with the name alone and the linked number is used; a different number in `contact.phone` is refused as `phone-mismatch`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"session":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The session id the hold was made in."},"hold":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The `id` of the hold to confirm."},"contact":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"phone":{"type":"string","maxLength":30},"email":{"type":"string","maxLength":120,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["name","phone"],"additionalProperties":false,"description":"The customer's own name and phone number (9 digits, or +country code and the number). Ask them; never invent one. With a linked number the phone may be left out."}},"required":["session","hold","contact"],"additionalProperties":false}},{"name":"confirm_phone","description":"Spend the code that link_phone texted, and tie this agent to that number. Ten minutes and five tries; a wrong code answers `invalid-code` with `attemptsLeft`, and the fifth wrong one throws the code away — call link_phone again for a new one. One number per agent: linking another replaces it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{6}$","description":"The six digits from the SMS."}},"required":["code"],"additionalProperties":false}},{"name":"find_offers","description":"Find offers from local businesses for what a person asked for. Send their sentence as `text`; the hub parses the trade, the town and the day. An answer with `complete: false` carries a `question` to put to the person: call this tool again with the same `session` and their reply as `text`. An answer with `complete: true` is one finished bidding round: `bids` ranked (price in grosz, slot, business, note) and one `outcome` per business asked. An empty `bids` list is a normal answer; `outcomes` says why. A bid whose `business.active` is true comes from a business whose owner has confirmed it is running; those are ranked above the rest, and cheapest first inside each group.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"text":{"type":"string","description":"What the person said, in Polish or English, at most 500 characters. Their reply to the previous question goes here too."},"session":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The session id from an earlier answer. Omit it to start a new conversation."},"selection":{"type":"object","properties":{"business":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$"},"service":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$"}},"required":["business"],"additionalProperties":false,"description":"Restrict the round to one business (and optionally one of its services), by slug, as a link from a business page does."}},"required":["text"],"additionalProperties":false}},{"name":"get_booking","description":"Read the state of a session: the understood intent and its open question, the bids of the current round and every hold with its present status and link. Use it to pick up a conversation you already have a session id for.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"session":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The session id from an earlier answer."}},"required":["session"],"additionalProperties":false}},{"name":"hold_slot","description":"Hold the slot of one bid from this session's round for ten minutes, before asking the person for their details. Answers the hold, the bid it was made from and, when the hub has a public origin, the customer's private booking `link`. Never call it to browse: a hold blocks a real slot and three per client per ten minutes is the budget.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"session":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The session id the round was run in."},"bid":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}$","description":"The `id` of one bid from the latest round."}},"required":["session","bid"],"additionalProperties":false}},{"name":"link_phone","description":"Tie this agent to the phone number of the person it books for: the hub texts that number a six-digit code naming this agent, and `confirm_phone` spends it. Afterwards `confirm_booking` may leave `contact.phone` out — the linked number is used — and every booking made through this key shows up on that person's own list of bookings at /me, next to the ones they made on the site. Ask the person for their own number and never anybody else's: a code arrives on their phone with this agent's name on it. Answers `{ ok: true, sent: true }` whatever the hub knows about the number, and 3 calls per agent per hour is the budget.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"phone":{"type":"string","maxLength":30,"description":"The person's own number (9 digits, or +country code and the number)."}},"required":["phone"],"additionalProperties":false}},{"name":"register_agent","description":"Get this agent its own identity, once: answers an `agent` id and a `key`. The key is shown in this answer and never again — keep it and send it as `Authorization: Bearer <key>` on every later call. hold_slot, confirm_booking, cancel_booking need it; finding offers and reading a session do not. With a key the hold and cancel budgets are yours instead of your address's, so two agents behind one address no longer take each other's. 3 registrations per client per day: register once and keep the key, do not mint one per conversation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"pattern":"^[^\\p{C}]+$","description":"What to call this agent, for the operator to recognise it by: one line, 1–60 characters. Not a secret and not a login — the key is the identity."}},"required":["name"],"additionalProperties":false}},{"name":"unlink_phone","description":"Forget the number this agent was linked to. The bookings already made keep it — they belong to the person, not to this agent — and confirm_booking needs a full `contact` again. Answers the same whether there was a link or not.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}}],"scan":{"score":53,"grade":"D","scanned_at":"2026-09-19T19:23:13.899Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:23:13.885Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2812ms"]},"poisoning":{"score":15,"max":15,"notes":["10 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 1 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://openintentprotocol.com/mcp","reachable":true,"authRequired":false,"latencyMs":2812,"serverInfo":{"name":"intent-hub","version":"0.1.0"}}],"packages":[],"repo":{"found":false,"owner":"bartek-filipiuk","repo":"intent-hub","error":"repo not found"},"icon":{"url":null,"source":"none"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[{"kind":"downgrade","fromGrade":"C","toGrade":"D","reason":"score 53: Write-action tools reachable without authentication","createdAt":"2026-09-19T00:30:06.643Z"}],"reviews":[]}