_ registry / mcp streamable-http · checked 2h ago

craftingeventfinder

https://craftingeventfinder.com

Registry code: 7c731ef438518925

api record

Search and read crafting events on Crafting Event Finder. Public tools need no key. Account and admin tools need Authorization: Bearer cef_<scope>_... from /admin/api-keys.

endpoint
https://craftingeventfinder.com/api/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is craftingeventfinder live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is craftingeventfinder free to use?
Yes — the hub reached it with no key and no payment.
What tools does craftingeventfinder have?
18 tools: get_event, get_event_contact, get_event_join_details, get_organizer, get_site_info, get_taxonomy, list_events, list_online_event_picks, ….
Is craftingeventfinder safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
825ms

last good check

priced tools
0

of 18 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 18 tools
3 open 15 never probed 3 of 18 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • count_events_by_craft open 2h ago

    Count matching events per craft. How many events match a search, per top-level craft, for the 'Jump to a craft' chips. Takes the same filters as GET /api/events (q, type, tag, state, when or from+to, near or lat+lng, radius, free, online, inperson, tz) and counts with every one of them except craft, which is accepted and ignored, so each craft keeps its number while one is chosen. Child crafts count toward their top-level parent (needlepoint, cross-stitch and embroidery count as needlework), and an event counts once per top-level craft, so the crafts can add up to more than `total`, the distinct number of matching events. A craft's count equals the total GET /api/events reports for that craft=<slug>, with one known exception: with a text query (q), the typo-tolerant fallback applies only when a search has no exact text match, so it can apply to the all-crafts count but not to one craft's search (or the other way round) and the numbers can then differ. Only crafts with at least one match are listed, most first, then in taxonomy order. Location is never inferred from the caller's IP; a near that matches no US place is a 400. Answers 503 not_configured while the counts aren't available.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "maxLength": 200
        },
        "to": {
          "type": "string",
          "maxLength": 10
        },
        "tz": {
          "type": "string",
          "maxLength": 64
        },
        "lat": {
          "type": "string",
          "maxLength": 20
        },
        "lng": {
          "type": "string",
          "maxLength": 20
        },
        "tag": {
          "type": "string",
          "maxLength": 400
        },
        "free": {
          "type": "string",
          "maxLength": 1
        },
        "from": {
          "type": "string",
          "maxLength": 10
        },
        "near": {
          "type": "string",
          "maxLength": 100
        },
        "sort": {
          "type": "string",
          "maxLength": 10
        },
        "type": {
          "type": "string",
          "maxLength": 200
        },
        "when": {
          "type": "string",
          "maxLength": 20
        },
        "craft": {
          "type": "string",
          "maxLength": 400
        },
        "state": {
          "type": "string",
          "maxLength": 40
        },
        "online": {
          "type": "string",
          "maxLength": 10
        },
        "radius": {
          "type": "string",
          "maxLength": 5
        },
        "inperson": {
          "type": "string",
          "maxLength": 10
        }
      }
    }
    arguments 73 lines
  • get_appearance open 2h ago

    This site's look: its theme and the season showing today

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • get_event_demand open 2h ago

    Upcoming event counts by network craft. A daily snapshot (crafting-network/event-demand@1) of how many published events Crafting Event Finder lists in the next 60 days (today to today plus 60, Pacific), per network craft tag from the network manifest, most first then by tag. Each craft gives its label, count (distinct events with a day in the window; a repeating or running event counts once), online (online or hybrid events), earliest (the first day in the window with one) and regions (a count per US state code, with online events as `online`; a hybrid event counts in its state). A child craft rolls up to its parent's tag; an Other crafts event counts under the tags its own words name; craft-fair is never a tag, and an event with no tag is left out. Counts and dates only. The answer never depends on the caller and is recomputed at most once a day.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • get_event unknown never probed

    Get one event by slug. One published event with its upcoming dates and its organizer's pictures (`images`, the first is the cover). `owned` says whether an organizer manages it, and `managedBy` names that organizer (their public page's slug, name and picture) when their profile is public. A former slug (the event was renamed when its year or town changed) answers the same event, under its current `slug`. A cancelled event whose dates aren't over yet also answers, with `cancelled` true and no upcoming dates; `scheduleChange` says when a published event is postponed, rescheduled (with `previousStartDate`) or moved online.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • get_event_contact unknown never probed

    Get an event's organizer contact. The contact name, email and phone the organizer published for this event, exactly as they wrote them. 404s when the event has neither a name nor an email/phone. Rate-limited more strictly than other reads (the detail limit), and answers with Cache-Control: no-store and X-Robots-Tag: noindex.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • get_event_join_details unknown never probed

    Get an online event's join details. The link, meeting ID, passcode and phone the organizer published for joining online, exactly as they wrote them. Shown only from 30 minutes before the start of the event's next occurrence until it ends: outside that window it answers 403 forbidden with a message saying when the details appear (details.opensAt, an ISO time, when known). 404s when the event has none of these. Rate-limited more strictly than other reads (the detail limit), and answers with Cache-Control: no-store and X-Robots-Tag: noindex.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • get_organizer unknown never probed

    Get an organizer's public page. An organizer's public profile (name, About, website, town and state, crafts and picture) with their published events on this site: upcoming soonest first (at most 50), then the newest 12 past. Only organizers with a display name have a public page; anyone else is 404.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • get_site_info unknown never probed

    This site's name and which crafts it covers

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • get_taxonomy unknown never probed

    Craft types, event types and tags used across the site

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • list_events unknown never probed

    Search upcoming crafting events on this site. Published, upcoming events with their next date in the window. Filters: q (full text with typo tolerance), craft/type/tag (comma lists of taxonomy slugs; a top-level craft also matches its child crafts, so needlework includes cross-stitch), state, when (weekend|next7|next30|next90|month:YYYY-MM) or from+to, near (a US place as 'City, ST', e.g. 'Columbus, OH', or 'all') or lat+lng, radius (25|50|100|250|any, default 100 with a location), free=1, online=1 (only online events; other values are ignored), inperson=1 (only in-person events, including multi-location; other values are ignored; online=1 and inperson=1 together cancel out to no format filter, rather than matching nothing), sort (date|distance|relevance; default best match for q, else soonest first; distance needs a location, and without one falls back to that default), tz (IANA, for date presets). Invalid filter values are ignored, except a near that matches no US place, which is a 400 validation_failed. With no state, near or lat+lng, a trailing US place in q, like 'quilt show Arizona' or 'Phoenix, AZ', sets the location: a state name or capitalized code becomes state and 'City, ST' becomes near (radius 50 unless given; a city that matches no place is retried on its last 2 words, then its last word, then falls back to its state), and the place is removed from the text query. Location is never inferred from the caller's IP. `featured` holds up to 3 featured events matching the same search; they are excluded from `items` on every page. featured=0 turns that off: no featured lookup, `featured` is empty and `items` leaves nothing out (for a client that shows its own results without a featured row).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "maxLength": 200
        },
        "to": {
          "type": "string",
          "maxLength": 10
        },
        "tz": {
          "type": "string",
          "maxLength": 64
        },
        "lat": {
          "type": "string",
          "maxLength": 20
        },
        "lng": {
          "type": "string",
          "maxLength": 20
        },
        "tag": {
          "type": "string",
          "maxLength": 400
        },
        "free": {
          "type": "string",
          "maxLength": 1
        },
        "from": {
          "type": "string",
          "maxLength": 10
        },
        "near": {
          "type": "string",
          "maxLength": 100
        },
        "sort": {
          "type": "string",
          "maxLength": 10
        },
        "type": {
          "type": "string",
          "maxLength": 200
        },
        "when": {
          "type": "string",
          "maxLength": 20
        },
        "craft": {
          "type": "string",
          "maxLength": 400
        },
        "limit": {
          "type": "integer",
          "default": 24,
          "maximum": 100,
          "minimum": 1
        },
        "state": {
          "type": "string",
          "maxLength": 40
        },
        "cursor": {
          "type": "string",
          "maxLength": 500
        },
        "online": {
          "type": "string",
          "maxLength": 10
        },
        "radius": {
          "type": "string",
          "maxLength": 5
        },
        "featured": {
          "type": "string",
          "maxLength": 10,
          "description": "0 skips the featured row: `featured` comes back empty and nothing is left out of `items`. Any other value is ignored."
        },
        "inperson": {
          "type": "string",
          "maxLength": 10
        }
      }
    }
    arguments 88 lines
  • list_online_event_picks unknown never probed

    Online event picks to show beside a local search. The Online events band for a local search (a place with a distance, or a state): at most 3 online events anywhere that match the search's words, crafts, types, tags, price and dates, filled from other crafts only when short, each part ranked with a start in the viewer's small hours (10 pm to 7 am in tz) after the rest, then soonest, and the caller's Accept-Language first. Takes the same filters as GET /api/events. `total` and `href` are 'See all online events (N)': /online with the search's top-level crafts and Free only, counted over its next 30 days (the crafts dropped when none has an online event); `matched` is how many picks matched the search's own crafts; `crafts` the search's top-level crafts. Location is never inferred from the caller's IP; a near that matches no US place is a 400.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "maxLength": 200
        },
        "to": {
          "type": "string",
          "maxLength": 10
        },
        "tz": {
          "type": "string",
          "maxLength": 64
        },
        "lat": {
          "type": "string",
          "maxLength": 20
        },
        "lng": {
          "type": "string",
          "maxLength": 20
        },
        "tag": {
          "type": "string",
          "maxLength": 400
        },
        "free": {
          "type": "string",
          "maxLength": 1
        },
        "from": {
          "type": "string",
          "maxLength": 10
        },
        "near": {
          "type": "string",
          "maxLength": 100
        },
        "sort": {
          "type": "string",
          "maxLength": 10
        },
        "type": {
          "type": "string",
          "maxLength": 200
        },
        "when": {
          "type": "string",
          "maxLength": 20
        },
        "craft": {
          "type": "string",
          "maxLength": 400
        },
        "state": {
          "type": "string",
          "maxLength": 40
        },
        "online": {
          "type": "string",
          "maxLength": 10
        },
        "radius": {
          "type": "string",
          "maxLength": 5
        },
        "inperson": {
          "type": "string",
          "maxLength": 10
        }
      }
    }
    arguments 73 lines
  • list_online_events unknown never probed

    Online events, by day in the viewer's time zone. The /online page: every published online or hybrid event whose next date falls in the next 30 days (from today in tz), filtered by craft, time of day (tod), day, free and language (lang), all judged in the viewer's zone (tz), and grouped by the viewer's own start date. At most 200 events are read; `truncated` says more exist. Time of day and day are worked out per event from its own start time and zone, which is why they live here and not on GET /api/events (online=1 there lists online events by their own dates, paged).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "tz": {
          "type": "string",
          "maxLength": 64,
          "description": "The viewer's IANA time zone; days and times of day are judged in it. Default America/New_York."
        },
        "day": {
          "type": "string",
          "maxLength": 20,
          "description": "today, week (the next 7 days) or weekend (this or the coming Fri to Sun), in tz."
        },
        "tod": {
          "type": "string",
          "maxLength": 100,
          "description": "Comma list of morning (5 am to noon), afternoon (noon to 5 pm), evening (5 pm to 5 am), judged in tz; an event with no start time never matches one."
        },
        "free": {
          "type": "string",
          "maxLength": 5,
          "description": "1 for free events only."
        },
        "lang": {
          "type": "string",
          "maxLength": 10,
          "description": "One language code (en, es): only events known to be held in it. Without it every language shows, the caller's Accept-Language ranked first within each day."
        },
        "craft": {
          "type": "string",
          "maxLength": 500,
          "description": "Comma list of top-level craft slugs (any of); unknown slugs are ignored."
        }
      }
    }
    arguments 35 lines
  • lookup_place unknown never probed

    Look up US places by name (for location search). Prefix match on US Census places. Accepts 'City' or 'City, ST'. Returns up to 8, largest first.

    mcp-tool

    {
      "type": "object",
      "required": [
        "q"
      ],
      "properties": {
        "q": {
          "type": "string",
          "maxLength": 60,
          "minLength": 2
        }
      }
    }
    arguments 13 lines
  • request_event_correction unknown never probed

    Report an issue with an event listing. Anyone can flag an event as wrong, gone, cancelled, postponed or moved to a new date (rescheduled, with `newStartDate`); an admin reviews every request, none is applied on its own. Browser forms pass Turnstile; programmatic callers send an API key instead.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug",
        "kind",
        "message"
      ],
      "properties": {
        "kind": {
          "enum": [
            "correct",
            "remove",
            "cancelled",
            "postponed",
            "rescheduled"
          ],
          "type": "string",
          "description": "postponed: new date to come; rescheduled: it has a new date (give it as newStartDate)"
        },
        "slug": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1
        },
        "message": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1
        },
        "website": {
          "type": "string"
        },
        "contactEmail": {
          "type": "string",
          "format": "email",
          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
          "maxLength": 254
        },
        "newStartDate": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "For a rescheduled request: the event's new start date"
        },
        "turnstileToken": {
          "type": "string"
        }
      }
    }
    arguments 48 lines
  • similar_events unknown never probed

    Events like this one. Up to 4 upcoming events like this one ("More like this" on the event page), never including the event itself: the same top-level crafts (a craft's child crafts included), or the same event type when the event has no craft; within 100 miles of the event, nearest first (250 miles when that finds fewer than 2); other online events anywhere, soonest first, for an online event; the event's state, soonest first, for an in-person event without a map point; over the next 90 days. An event with neither a craft nor a type gets an empty list. A hidden, cancelled or unknown slug is a 404.

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string"
        }
      }
    }
    arguments 11 lines
  • submit_event unknown never probed

    Submit an event for review. Goes to the moderation queue. Browser forms pass Turnstile; programmatic callers send an API key instead. A signed-in caller (session or user-scope key) skips Turnstile, is recorded as the submitter, may omit organizer_email (the account email is used), and a trusted submitter's event can publish straight away when auto-approval is on. Anonymous callers must send organizer_email.

    mcp-tool

    {
      "type": "object",
      "required": [
        "title",
        "start_date"
      ],
      "properties": {
        "url": {
          "anyOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "string",
              "const": ""
            }
          ]
        },
        "city": {
          "type": "string",
          "maxLength": 100,
          "description": "The town; required unless location_kind is online"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60
          },
          "maxItems": 20
        },
        "state": {
          "type": "string",
          "maxLength": 40,
          "description": "A US state name or two-letter code; required unless location_kind is online (then taken from the time zone)"
        },
        "title": {
          "type": "string",
          "maxLength": 200,
          "minLength": 1
        },
        "venue": {
          "type": "string",
          "maxLength": 200
        },
        "is_free": {
          "type": "boolean"
        },
        "website": {
          "type": "string"
        },
        "end_date": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            },
            {
              "type": "string",
              "const": ""
            }
          ]
        },
        "end_time": {
          "type": "string",
          "maxLength": 8
        },
        "join_url": {
          "type": "string",
          "maxLength": 500
        },
        "timezone": {
          "type": "string",
          "maxLength": 64,
          "description": "The event's own clock (IANA, like America/Chicago); required for an online or hybrid event"
        },
        "hosted_by": {
          "type": "string",
          "maxLength": 120,
          "description": "The group or shop hosting an online or hybrid event"
        },
        "languages": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 5,
          "description": "The languages the event is held in, as BCP 47 codes (en, es); leave out when unknown"
        },
        "event_type": {
          "type": "string",
          "maxLength": 40
        },
        "join_phone": {
          "type": "string",
          "maxLength": 40
        },
        "price_note": {
          "type": "string",
          "maxLength": 200
        },
        "start_date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "start_time": {
          "type": "string",
          "maxLength": 8
        },
        "craft_types": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "default": [],
          "maxItems": 20
        },
        "description": {
          "type": "string",
          "maxLength": 5000
        },
        "postal_code": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^\\d{5}$"
            },
            {
              "type": "string",
              "const": ""
            }
          ]
        },
        "contact_name": {
          "type": "string",
          "maxLength": 120
        },
        "contact_email": {
          "type": "string",
          "maxLength": 200
        },
        "join_passcode": {
          "type": "string",
          "maxLength": 40
        },
        "location_kind": {
          "enum": [
            "venue",
            "online",
            "hybrid",
            "multi"
          ],
          "type": "string"
        },
        "street_address": {
          "type": "string",
          "maxLength": 200
        },
        "turnstileToken": {
          "type": "string"
        },
        "join_meeting_id": {
          "type": "string",
          "maxLength": 40
        },
        "organizer_email": {
          "type": "string"
        }
      }
    }
    arguments 174 lines
  • count_events_by_state unknown never probed

    Count upcoming events per state. Upcoming published events in the next 12 months, grouped by US state, with each state's most common craft. `by` must be `state`.

    mcp-tool

    {
      "type": "object",
      "required": [
        "by"
      ],
      "properties": {
        "by": {
          "type": "string",
          "const": "state"
        }
      }
    }
    arguments 12 lines
  • get_not_listed_event unknown never probed

    A withdrawn event's title and status, with events like it. For the address of an event this site no longer lists (hidden, or cancelled and past): its title, whether it was cancelled, and up to 4 upcoming events like it (the same search as /similar). Never its contact, join or owner details. Any other slug (unknown, published, another site's) is a 404. The event page's 404 shows this (WI-094, WI-097).

    mcp-tool

    {
      "type": "object",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "maxLength": 200
        }
      }
    }
    arguments 12 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 7c731ef438518925.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/7c731ef438518925/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/7c731ef438518925/badge.svg)](https://brick.blue/agent/7c731ef438518925?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.