io.github.bartek-filipiuk/intent-hub
REMOTE · OPENINTENTPROTOCOL.COM · SCANNED SEP 20
Book a local business by saying what you need; matching businesses bid and you confirm one.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 10 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability87
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1569 tokens (~112/item across 14 items; 10 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management10
- Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "unlink_phone" implies "unlink" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
How do I install the io.github.bartek-filipiuk/intent-hub MCP server?
io.github.bartek-filipiuk/intent-hub is a hosted endpoint at https://openintentprotocol.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · openintentprotocol.com
claude mcp add --transport http bartek-filipiuk-intent-hub 'https://openintentprotocol.com/mcp'
{
"mcpServers": {
"bartek-filipiuk-intent-hub": {
"url": "https://openintentprotocol.com/mcp"
}
}
} {
"servers": {
"bartek-filipiuk-intent-hub": {
"type": "http",
"url": "https://openintentprotocol.com/mcp"
}
}
} [mcp_servers.bartek-filipiuk-intent-hub] url = "https://openintentprotocol.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"bartek-filipiuk-intent-hub": {
"type": "remote",
"url": "https://openintentprotocol.com/mcp",
"enabled": true
}
}
} openclaw mcp add bartek-filipiuk-intent-hub --url 'https://openintentprotocol.com/mcp' --transport streamable-http
mcp_servers:
bartek-filipiuk-intent-hub:
url: "https://openintentprotocol.com/mcp" {
"McpServers": {
"bartek-filipiuk-intent-hub": {
"Transport": "http",
"Url": "https://openintentprotocol.com/mcp"
}
}
} assistant mcp add bartek-filipiuk-intent-hub -t streamable-http -u 'https://openintentprotocol.com/mcp'
{
"mcpServers": {
"bartek-filipiuk-intent-hub": {
"type": "http",
"url": "https://openintentprotocol.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Sept 26 −1
- Tool “confirm_booking” rewrote its description, which is the text the model reads security
- Tool “find_offers” rewrote its description, which is the text the model reads security
- Schema quality: pass → fail ▼ functional
- Destructive annotations: pass → 0 functional
- New tool “confirm_phone” functional
- New tool “link_phone” functional
- New tool “unlink_phone” functional
- “confirm_booking” reworded the description of “contact” cosmetic
- 18 Sept 26 0
- Stability: unverified → 0.03 ▲ functional
- 17 Sept 26 65
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://openintentprotocol.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=openintentprotocol.com | CN=YR2,O=Let's Encrypt,C=US | 12 Sept 2026 | 11 Dec 2026 | RSA 4096 | SHA256-RSA | 6ea6ab073e4204807fe72d8f3603f888e99 |
| SANs: openintentprotocol.com | ||||||
| CN=YR2,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | 4ebd24947e24d394802d84a52fd5b319 |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of openintentprotocol.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| openintentprotocol.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| content-security-policy | default-src 'none'; style-src 'self' 'unsafe-inline'; font-src 'self'; script-src 'self'; connect-src 'self'; form-action 'self'; frame-ancestors 'self'; base-uri 'none' |
| x-content-type-options | nosniff |
| referrer-policy | no-referrer |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://openintentprotocol.com/mcp | Verified | 200 | |
| http (plaintext) | http://openintentprotocol.com/mcp | HTTPS enforced | 302 | https://openintentprotocol.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
cancel_booking ~73
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`.
| Name | Type | Req | Description |
|---|---|---|---|
| hold | string | yes | The `id` of the hold to release. |
| session | string | yes | The session id the hold was made in. |
No output schema declared.
No examples provided.
capabilities ~93
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
confirm_booking ~158
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`.
| Name | Type | Req | Description |
|---|---|---|---|
| contact | object | yes | 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. |
| hold | string | yes | The `id` of the hold to confirm. |
| session | string | yes | The session id the hold was made in. |
No output schema declared.
No examples provided.
confirm_phone ~87
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.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The six digits from the SMS. |
No output schema declared.
No examples provided.
find_offers ~259
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.
| Name | Type | Req | Description |
|---|---|---|---|
| selection | object | – | Restrict the round to one business (and optionally one of its services), by slug, as a link from a business page does. |
| session | string | – | The session id from an earlier answer. Omit it to start a new conversation. |
| text | string | yes | What the person said, in Polish or English, at most 500 characters. Their reply to the previous question goes here too. |
No output schema declared.
No examples provided.
get_booking ~68
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.
| Name | Type | Req | Description |
|---|---|---|---|
| session | string | yes | The session id from an earlier answer. |
No output schema declared.
No examples provided.
hold_slot ~114
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bid | string | yes | The `id` of one bid from the latest round. |
| session | string | yes | The session id the round was run in. |
No output schema declared.
No examples provided.
link_phone ~171
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.
| Name | Type | Req | Description |
|---|---|---|---|
| phone | string | yes | The person's own number (9 digits, or +country code and the number). |
No output schema declared.
No examples provided.
register_agent ~171
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.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | 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. |
No output schema declared.
No examples provided.
unlink_phone ~57
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the io.github.bartek-filipiuk/intent-hub MCP server?
io.github.bartek-filipiuk/intent-hub is an MCP server listed in the public MCP registry as io.github.bartek-filipiuk/intent-hub. Book a local business by saying what you need; matching businesses bid and you confirm one. This page covers its hosted endpoint (https://openintentprotocol.com/mcp).
Is the io.github.bartek-filipiuk/intent-hub MCP server safe to use?
io.github.bartek-filipiuk/intent-hub scores 65 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.bartek-filipiuk/intent-hub MCP server expose?
io.github.bartek-filipiuk/intent-hub exposes 10 tools: find_offers, hold_slot, confirm_booking, cancel_booking, get_booking, and 5 more. Their descriptions and schemas cost roughly 1,251 tokens of context every time the server is loaded.
Does the io.github.bartek-filipiuk/intent-hub MCP server require authentication?
No. We connected to io.github.bartek-filipiuk/intent-hub without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.bartek-filipiuk/intent-hub MCP server still maintained?
io.github.bartek-filipiuk/intent-hub is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.