{"name":"io.github.reiarseni/mockpost","slug":"reiarseni-mockpost","title":null,"description":"Local multi-channel message emulator for E2E testing, with MCP tools for LLM agents.","url":"https://mcp.market/server/reiarseni-mockpost","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":21,"stars":2,"forks":2,"downloads_week":19,"last_push_at":"2026-08-24T19:02:08.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":null,"website":null,"version":"0.3.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"mockpost","version":"0.3.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Base URL of the MockPost HTTP service (default http://localhost:8090)","format":"string","name":"MOCKPOST_URL"}]}],"tools":[{"name":"clear_all","description":"Delete all captured messages (or only those of a test_id/app).","write_action":true,"price_micros":0,"input_schema":null},{"name":"clear_channel","description":"Delete all captured messages of a channel (cleanup between test runs). With app, only that app's messages.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_push_subscription","description":"Create a Web Push subscription and return it shaped exactly like the browser's PushSubscription (endpoint + keys.p256dh + keys.auth). Hand it to the app under test: MockPost keeps the private key, so when the backend sends the encrypted push with pywebpush or web-push it verifies the VAPID signature, decrypts the payload and captures the cleartext.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_app","description":"Delete a registered app. Its webhooks become global.","write_action":true,"price_micros":0,"input_schema":null},{"name":"expire_push_subscription","description":"Mark a Web Push subscription as gone: the next push answers 410, which is how a backend learns it must delete a dead subscription.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_totp_secret","description":"Generate and store a TOTP secret (Google Authenticator). Returns base32 secret and otpauth:// URL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_channel_config","description":"Return host/port/base URL/fake tokens the app must use for that channel.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_latest_otp","description":"Return the latest OTP code (SMS or email) sent to an identifier.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_message_detail","description":"Return a message's full payload, including raw_payload (MIME/JSON).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_oauth_session","description":"Inspect a simulated OAuth session: code, tokens, returned profile and expiry.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_timeline_markdown","description":"FULL TIMELINE as Markdown: messages + webhook_events + stripe_events in chronological order. Call this first when verifying a test result; use get_message_detail only for a single event's detail. With app, only that app's events.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_totp_code","description":"Compute the current TOTP code (6 digits) for a previously generated secret. Window ±1.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_apps","description":"List registered apps with their fake credentials (MockPost identity).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_push_subscriptions","description":"List Web Push subscriptions with their endpoint and status (active|gone).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sent_messages","description":"List captured messages for a channel (or all), newest first. channel: mail|telegram|whatsapp|webpush|sms|fcm|apns|slack|discord|stripe app: registered app name to filter only its messages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_webhook_deliveries","description":"Webhook delivery history: what each app returned (code + body), even if it was down (response_code 0). Filterable by channel and app.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_webhooks","description":"List registered webhooks, optionally filtered by channel and app.","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_app","description":"Register or update an app: bind its FAKE credentials (Telegram bot token, Twilio SID, Stripe sk_test_, WhatsApp phone_id, FCM project_id) to a name. The app talks to MockPost using those credentials as if it were the real service; MockPost identifies it by them. Use the same name to update creds.","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_webhook","description":"Register an app webhook (Telegram setWebhook, WhatsApp, Stripe...). If you pass an app (registered name), the webhook only receives events from that app.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_app","description":"Set the active app (a name registered in MockPost): incoming event simulations and queries are filtered/delivered only to that app. Pass null/None for no app. Register apps with register_app.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_oauth_fake_profile","description":"Set the profile the fake OAuth provider (google|github|facebook|x) returns on the next login.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_test_id","description":"Set the active test_id: all subsequent calls are filtered/persisted with it. Pass null/None to go back to the global queue.","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_delivery_webhook","description":"Fire a delivery status webhook (delivered|read|failed) back to the app. Uses POST /whatsapp/simulate/status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_facebook_event","description":"Fire a Facebook Graph API webhook event signed with X-Hub-Signature-256 to the app's registered Facebook webhook. app: registered app name to target; overrides set_app for this call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_github_event","description":"Fire a GitHub webhook event (push, issues, pull_request) signed with X-Hub-Signature-256 to the app's registered GitHub webhook. app: registered app name to target; overrides set_app for this call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_incoming_message","description":"Simulate an external user sending an inbound message to the app. channel: telegram (via /telegram/client/sendMessage) or whatsapp. app: registered app name to target; overrides set_app for this call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_push_token_unregistered","description":"Make a native push token look uninstalled: FCM answers 404 UNREGISTERED and APNs answers 410 Unregistered on the next send. channel: fcm | apns","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_stripe_event","description":"Build and send a simulated Stripe event, signed (Stripe-Signature), to the registered webhook. app: registered app name to target; overrides set_app for this call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"simulate_x_event","description":"Fire an X (Twitter) Account Activity webhook event signed with X-Twitter-Webhooks-Signature to the app's registered X webhook. payload is a list of event objects, as the real API delivers. app: registered app name to target; overrides set_app for this call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"trigger_webhook","description":"Fire a test event to a registered webhook and return the app's response.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_facebook_webhook","description":"Verify a Facebook webhook subscription (hub.mode/hub.verify_token/ hub.challenge) as Meta does on registration. Returns the challenge URL.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":88,"grade":"A","scanned_at":"2026-10-31T17:29:31.171Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-31T17:29:31.106Z","components":{"code":{"score":25,"max":25,"notes":["38 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":12,"max":15,"notes":["last push 68 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"mockpost","version":"0.3.0","found":true,"weeklyDownloads":19,"license":"MIT","dependencyCount":16,"publishedAt":"2026-08-24T19:10:36.148102Z","repositoryUrl":"https://github.com/reiarseni/mockpost"}],"repo":{"found":true,"owner":"reiarseni","repo":"mockpost","archived":false,"pushedAt":"2026-08-24T19:02:08Z","stars":2,"forks":2,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/13078088?v=4","ownerCreatedAt":"2015-06-27T15:10:56Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/13078088?v=4&s=128","source":"registry"},"presence":{"stars":2,"forks":2,"downloadsWeek":19,"license":"MIT","lastPushAt":"2026-08-24T19:02:08.000Z","score":21}}}},"grade_history":[],"reviews":[]}