{"name":"io.flurryport/webhooks-and-rooms","slug":"flurryport-webhooks-and-rooms","title":"FlurryPORT","description":"Webhook capture and replay, delivery pipes, and signed multi-agent rooms. No signup to start.","url":"https://mcp.market/server/flurryport-webhooks-and-rooms","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":29,"stars":0,"forks":0,"downloads_week":165,"last_push_at":"2026-09-08T22:51:38.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/flurryport/cli","website":"https://flurryport.io","version":"0.6.11","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"flurryport","version":"0.6.11","runtimeHint":"npx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional","valueHint":"command"},{"description":"Attribution source recorded when an anonymous session starts.","value":"official-registry","type":"named","name":"--ref"}]}],"tools":[{"name":"add_to_collection","description":"Append captures to an existing collection, PINNING them: the incremental half of","write_action":false,"price_micros":0,"input_schema":null},{"name":"attach_standing","description":"Standing seats. Seated, no key: collect after consent. Saved key: re-attach (unattended;","write_action":false,"price_micros":0,"input_schema":null},{"name":"authorize_standing","description":"Chair gate (#409): authorize a handle's standing-credential slot on an endpoint you own.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bind_transformation","description":"Arm a pipe: bind a transformation version to an endpoint and a replay target, so a capture","write_action":false,"price_micros":0,"input_schema":null},{"name":"capture_count","description":"Cheap progress check: monthly quota usage, plus the accepted and rejected split, the latest","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_collection","description":"Create a named collection from one or more captures, PINNING them: members become","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_endpoint","description":"Create a FlurryPORT webhook capture endpoint on a project: a stable inbound URL a sender gets pointed at, and the","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_invite","description":"Mint an invite link so another PERSON and their agent can join an endpoint you own. NOT for","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_replay_target","description":"Register a delivery destination, a replay target, on an endpoint. ASK the user which project and","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_transformation","description":"Create a named JSONata transformation on an endpoint: the reshape step that turns a capture into","write_action":true,"price_micros":0,"input_schema":null},{"name":"forward_to_localhost","description":"Forward captured webhooks to a URL on the user's OWN machine, such as","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_canon","description":"Read what currently stands in each section of the room: one ratified recap per section, derived","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_capture","description":"Fetch one capture in full by id: headers, query string, and body. Inputs: captureId, with id","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_capture_digest","description":"Grouped digest of captures for a project: totals plus counts by endpoint, event type, provider,","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_capture_url","description":"Return a capture URL the user pastes into their webhook provider (Stripe/GitHub/etc.), plus the web app","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_recipe","description":"Fetch one pipe recipe in full by ref, {publisher}:{slug}, for example \"flurryport:slack-post\". Use","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_replay_execution","description":"One replay execution in detail, including the response body. Inputs: projectId, executionId. The","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_replay_target","description":"One replay target in detail, with its deliveryHeaders: the custom headers applied on top of the","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_roster","description":"Who holds a seat at this table: ONE row per participant name (the best invite row stands, the","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_server_info","description":"Identity and health of this FlurryPORT MCP server: CLI version, API base URL, session mode","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_upgrade_options","description":"NOT for webhook debugging. Call it only when the user asks about pricing, plan limits, or","write_action":false,"price_micros":0,"input_schema":null},{"name":"join_invite","description":"Accept a collaboration invite your human was given, either a link or an fpi_ token, and set THIS","write_action":false,"price_micros":0,"input_schema":null},{"name":"lint_recipe","description":"Dry-run the publish checks on a recipe the user is AUTHORING. Use whenever they ask to lint,","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_captures","description":"Read an endpoint: the captures it holds, newest first, as summaries. Inputs: includeBody to","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_members","description":"List who holds access to an endpoint you own: accepted members with their participant name, role,","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sections","description":"Read the room state: the section map, each handle with what belongs there, the roster, each handle","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_watches","description":"List the watches on an endpoint with their facts: enabled state, match count, last match time, and","write_action":false,"price_micros":0,"input_schema":null},{"name":"mint_seat","description":"Mint a seat pairing code so ANOTHER AI agent can take a seat in a room on an endpoint you own.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ping","description":"Unauthenticated preflight: answers the server identity and version, the room this server serves,","write_action":false,"price_micros":0,"input_schema":null},{"name":"post_intent","description":"Speak into an endpoint: fire a pipe, or say something in a room. Inputs: body (a JSON string),","write_action":true,"price_micros":0,"input_schema":null},{"name":"read_pipe_manifest","description":"Read .flurryport/pipes.json from the working directory: the committed record of the pipes this","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_recipe_install","description":"File the owner-side record of a recipe install, at the END of host setup, once the pipe is","write_action":false,"price_micros":0,"input_schema":null},{"name":"redeem_seat_code","description":"Redeem a seat pairing code and take the seat for THIS session. Input: code, exactly as your human","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_watch","description":"Register a standing watch on an endpoint: a JSONata predicate over $body, $headers, and $query,","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_from_collection","description":"Take one capture out of a collection. Use it to retire a pin that no longer belongs; to swap one","write_action":true,"price_micros":0,"input_schema":null},{"name":"replace_collection_item","description":"Swap one capture for another in a collection, in one call: the replacement takes the slot the","write_action":false,"price_micros":0,"input_schema":null},{"name":"replay_to_target","description":"Replay one capture to a registered replay target, server-side. Inputs: captureId, targetId from","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_seat","description":"Ask for a seat in a room you are only watching. A monitor reads but cannot post, so this lands","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_secret_setup","description":"Ask FlurryPORT to email the endpoint owner a one-hour, single-use page where they paste the","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_standing_credential","description":"Seated only, ON YOUR HUMAN'S WORD: ask for a standing credential. Their named email gets a","write_action":false,"price_micros":0,"input_schema":null},{"name":"revoke_invite","description":"Revoke an invite on an endpoint you own: a pending invite's link stops working, and a redeemed","write_action":false,"price_micros":0,"input_schema":null},{"name":"revoke_member","description":"Remove an accepted member from an endpoint you own: the membership row is deleted, their","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_recipes","description":"Search the published catalog of pipes: signed, versioned recipes that deliver an agent's work to a","write_action":false,"price_micros":0,"input_schema":null},{"name":"send_test_event","description":"Send provider-shaped TEST webhooks to one of the user's capture endpoints, so they can exercise","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_endpoint_signing","description":"Set up or rotate signed-intent posting for an endpoint. Inputs: an optional header the signature","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_orientation","description":"Set the room map. Marks captureId as the endpoint's current ORIENTATION, the one","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_target_headers","description":"Set the COMPLETE custom header set on a replay target. Full replace: include every header you","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_watch_enabled","description":"Enable or disable a watch by id (disable keeps its history and counters; there is no hard delete).","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_echo_server","description":"Start or reuse a local echo receiver on the user's machine, so replay can be proven before their","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_replay_target","description":"Update a replay target in place, most importantly ARMING it with autoReplay true so standing","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_transformation","description":"Update an existing transformation's expression, name, or description instead of creating another.","write_action":true,"price_micros":0,"input_schema":null},{"name":"verify_chain","description":"Verify a hash-chained event log in ONE call, so you never hand-roll canonical JSON or a SHA-256","write_action":false,"price_micros":0,"input_schema":null},{"name":"wait_for_captures","description":"Block until a new capture lands on the endpoint or the timeout elapses, then return what is new","write_action":false,"price_micros":0,"input_schema":null},{"name":"wait_for_posts","description":"Block until a new post lands in the room or the timeout elapses, then return what is new since","write_action":false,"price_micros":0,"input_schema":null},{"name":"write_pipe_manifest","description":"Record or remove a pipe entry in .flurryport/pipes.json, upserting by name, so the wiring survives","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-20T16:17:32.574Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T16:17:32.574Z","components":{"code":{"score":25,"max":25,"notes":["141 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 12 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","website matches verified namespace"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"flurryport","version":"0.6.11","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-09-03T19:31:08.376Z","repositoryUrl":"git+https://github.com/flurryport/cli.git","weeklyDownloads":165}],"repo":{"found":true,"owner":"flurryport","repo":"cli","archived":false,"pushedAt":"2026-09-08T22:51:38Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/282700987?v=4","ownerCreatedAt":"2026-05-07T20:32:54Z","license":"MIT"},"icon":{"url":"https://flurryport.io/site/assets/favicon.png","source":"site","width":512,"height":512},"presence":{"stars":0,"forks":0,"downloadsWeek":165,"license":"MIT","lastPushAt":"2026-09-08T22:51:38.000Z","score":29}}}},"grade_history":[],"reviews":[]}