Skip to content
Agentmart
Submit a tool

Oakstack

Cron jobs with retries, webhook relay, HTML-to-PDF, and transactional email for your app.

Connector by oakstack.devOfficial · Domain verified by the MCP Registry

IndexedLicense unknownLocal (stdio)Remote (HTTP)
Write a review

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/oakstack-dev-oakstack

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://oakstack.dev/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Cron jobs with retries, webhook relay, HTML-to-PDF, and transactional email for your app.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
25 read · 17 write · 2 delete
Secrets
2 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 44

Read from the source code; the running server may list different tools.

Read 25 · Look things up without changing anything.

  • bell_get_notification
  • bell_list_apps
  • bell_list_devices
  • bell_list_notifications
  • clock_get_job
  • clock_list_jobs
  • clock_list_runs
  • hook_get_endpoint
  • hook_get_event
  • hook_list_endpoints
  • hook_list_events
  • lens_list_templates
Show 13 more tools
  • oakstack_docs
  • oakstack_usage
  • post_get_email
  • post_list_domains
  • post_list_emails
  • post_status
  • print_get_pdf
  • print_list_pdfs
  • print_list_templates
  • ring_get_text
  • ring_list_numbers
  • ring_list_texts
  • ring_status

Write 17 · Create, change, send or run things.

  • bell_create_web_app
  • bell_send_notification
  • clock_create_job
  • clock_run_job
  • clock_update_job
  • hook_create_endpoint
  • hook_replay_event
  • hook_update_endpoint
  • lens_extract
  • post_add_domain
  • post_create_inbound_address
  • post_send_email
Show 5 more tools
  • post_verify_domain
  • print_create_pdf
  • ring_add_opt_out
  • ring_send_text
  • ring_set_reply_hook

Delete 2 · Delete, drop, revoke or wipe things.

  • clock_delete_job
  • hook_delete_endpoint

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • Authorization
  • OAKSTACK_API_KEY

Network hosts it talks to 1

  • oakstack.dev · found in remote endpoint, install command

Tools (44)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • bell_create_web_appCreate a web push app

    Create a web push app for a website. Oakstack generates the VAPID keys; the result's config.vapidPublicKey goes to the browser (applicationServerKey). iOS (APNs) and Android (FCM) apps need the user's own keys: they add those in the Oakstack dashboard (Push page).

  • bell_get_notificationGet a push notificationread-only

    One notification with a delivery per device (status, platform response, error).

  • bell_list_appsList push appsread-only

    The workspace's push apps: web (vapidPublicKey for the browser's pushManager.subscribe), apns (iOS), fcm (Android), with any credential error. Call this before wiring push into an app.

  • bell_list_devicesList push devicesread-only

    Registered devices (filter by userId or appId). Devices the platform reported gone are 'invalid' and skipped automatically.

  • bell_list_notificationsList push notificationsread-only

    Recent notifications, newest first: status (queued, sending, sent, partial, failed, no_devices, canceled) and delivered/failed counts.

  • bell_send_notificationSend a push notification

    Send a push notification to a user's devices (userId as registered) or specific devices. With an ok_test_ key nothing reaches a device: delivery is simulated (a device token containing 'invalid' simulates an expired device). Returns status 'queued' (or 'no_devices' when the user has none, which isn't counted); check bell_get_notification for per-device results.

  • clock_create_jobCreate a scheduled job

    Schedule Oakstack to call a URL in the user's app on a cron schedule (like a cron job or Vercel Cron, but with retries and a run log). Returns the job, including `signingSecret`: tell the user to store it (e.g. OAKSTACK_SIGNING_SECRET) and verify the Oakstack-Signature header with `verifySignature` from the `oakstack` npm package. The target route must answer 2xx within 15 seconds. After creating, call clock_run_job to test it immediately.

  • clock_delete_jobDelete a scheduled jobcan change or delete data

    Delete a job and its run history. This cannot be undone; prefer pausing if unsure.

  • clock_get_jobGet a scheduled jobread-only

    Get one job, including its schedule, status, pausedReason, and signingSecret.

  • clock_list_jobsList scheduled jobsread-only

    List the workspace's scheduled jobs with status, next run time, and last result.

  • clock_list_runsList a job's runsread-only

    Recent runs of a job, newest first: status (pending, running, succeeded, failed), attempt, responseStatus, the first 2 KB of the response, and the error. Use this to debug a failing job.

  • clock_run_jobRun a job now

    Call the job's URL right now, outside its schedule (at most once every 10 seconds per job). Use it to test a new job. Then check clock_list_runs for the result (status, responseStatus, error).

  • clock_update_jobUpdate a scheduled job

    Change a job's fields, or pause/resume it with status 'paused' or 'active'. A job that auto-paused after repeated failures shows why in pausedReason; fix the URL, then set status 'active'.

  • hook_create_endpointCreate a webhook endpoint

    Create a permanent inbound webhook URL that stores every event and forwards it to the user's app with the original headers and body, retrying for about 11 hours if the app is down. Returns `url` (give it to the sender, e.g. paste into Stripe's or GitHub's webhook settings) and `signingSecret` (optional: verify the Oakstack-Signature header). The app should keep verifying the sender's own signature, which still works because headers and body bytes are forwarded unchanged.

  • hook_delete_endpointDelete a webhook endpointcan change or delete data

    Delete an endpoint and its events. Its inbound URL stops accepting immediately, so senders will start failing. Cannot be undone; prefer pausing if unsure.

Show 29 more tools
  • hook_get_endpointGet a webhook endpointread-only

    Get one endpoint, including its inbound URL and signingSecret.

  • hook_get_eventGet a webhook eventread-only

    One event with its original headers, body, and every delivery attempt (status code, response snippet, error, duration). Use this to debug why the user's app rejected an event.

  • hook_list_endpointsList webhook endpointsread-only

    List the workspace's webhook endpoints with their inbound URL, forward URL, and status.

  • hook_list_eventsList webhook eventsread-only

    Recent events received by an endpoint, newest first, with delivery status (pending, delivering, delivered, failed), attempts, last response status, and last error. Filter with status 'failed' to find what needs attention.

  • hook_replay_eventReplay a webhook event

    Forward an event to the endpoint again (for example after fixing a bug in the user's webhook handler). Creates a new event linked by replayOf. Each replay counts as one event toward the plan's monthly limit.

  • hook_update_endpointUpdate a webhook endpoint

    Change the name or forwardUrl, or pause/resume forwarding with status 'paused' or 'active'. Pausing holds events (they are still accepted and stored) and forwards them all on resume.

  • lens_extractRead images, PDFs, or text into structured data

    Read photos, screenshots, PDFs (by public URL or base64) or pasted text and return structured data. Use template 'product-list' (products, quantities, condition, prices, pre-orders), 'receipt', or 'contacts', or pass your own JSON Schema. Returns data plus warnings for anything unclear. Counts pages against the monthly limit.

  • lens_list_templatesList Oaklens templatesread-only

    The hosted extraction templates with their JSON Schema.

  • oakstack_docsOakstack docsread-only

    Full documentation as markdown: 'overview' (setup, errors, limits), 'clock' (scheduled jobs), 'hook' (webhook relay), 'print' (PDFs and templates), 'post' (email), 'lens' (reading images and documents), 'ring' (text messages), 'bell' (push notifications), 'signatures' (verifying Oakstack-Signature).

  • oakstack_usagePlan and usageread-only

    The workspace's plan and this month's usage against each limit (jobs, webhook events, PDFs, emails, texts, push notifications, pages read). Check this before creating things if a limit might be close.

  • post_add_domainAdd a sending domain

    Add a domain to send from. Returns DNS records: the user must add the required ones (3 DKIM CNAMEs) at their DNS provider; the recommended ones improve deliverability. The domain verifies by itself once the records are live (minutes to hours).

  • post_create_inbound_addressCreate an inbound email address

    Create an email address whose incoming mail is parsed (from, subject, text, html, attachments) and delivered as JSON to a webhook endpoint (create one with hook_create_endpoint first). Use it for support inboxes, reply handling, or email-to-app features.

  • post_get_emailGet an emailread-only

    One email with its body and every event: sent, delivered, bounced (with the receiving server's reason), complained, suppressed.

  • post_list_domainsList sending domainsread-only

    The workspace's sending domains with status (pending, verified, failed) and their DNS records.

  • post_list_emailsList emailsread-only

    Recent emails, newest first, with status (queued, sent, delivered, bounced, complained, failed, suppressed). Filter by status to debug.

  • post_send_emailSend an email

    Send a transactional email. `from` must use a verified domain (see post_add_domain). With an ok_test_ key nothing is delivered: delivery is simulated and logged (send to bounced@test.oakstack.dev or complained@test.oakstack.dev to simulate those). Attach a PDF with attachments: [{ filename, print: { template, data } }]. Returns the email with status 'queued'; check post_get_email for delivery.

  • post_statusEmail sending statusread-only

    Check whether live email can be sent from this workspace: whether sending is enabled, paused (after bounces or complaints), limited to workspace members (Free plan), and the current daily cap. Call this before setting up email.

  • post_verify_domainCheck a domain now

    Check a pending domain's DNS records right away instead of waiting for the automatic check.

  • print_create_pdfCreate a PDF

    Render a PDF from a full HTML document (`html`) or a hosted template (`template` + `data`). Returns the PDF with a private download `url` valid for an hour, page count, and size. Images and fonts in the HTML can be data: URLs or public https URLs. Counts against the monthly PDF limit.

  • print_get_pdfGet a PDFread-only

    One PDF with a fresh download url (valid an hour), its error if it failed, and any resources the page tried to load that were blocked.

  • print_list_pdfsList PDFsread-only

    Recent PDFs, newest first, with status (rendering, succeeded, failed), error, page count, and a fresh download url. Filter with status 'failed' to debug.

  • print_list_templatesList PDF templatesread-only

    List the hosted PDF templates (invoice, proposal, report). Each has a JSON Schema for its data and a working example. Call this before print_create_pdf with a template.

  • ring_add_opt_outOpt a phone out of texts

    Never text this phone again from this workspace (for example, someone who asked by email). STOP replies are added automatically.

  • ring_get_textGet a textread-only

    One text with every event (sent, delivered, undelivered with Twilio's error code).

  • ring_list_numbersList phone numbersread-only

    The workspace's toll-free numbers with their verification status (verifying, active, rejected with the reason) and the Oakhook endpoint replies go to.

  • ring_list_textsList textsread-only

    Recent texts, newest first, sent and received (direction 'inbound' are replies). Status: queued, sent, delivered, undelivered, failed, opted_out, canceled, received.

  • ring_send_textSend a text message

    Send an SMS to a US or Canadian phone. Comes from the workspace's approved toll-free number (or, before it's approved, the sandbox number to verified phones only). Include opt-out wording like 'Reply STOP to opt out.' in the first text to someone. With an ok_test_ key nothing is sent: delivery is simulated (+12025550180 simulates undelivered, +12025550181 carrier-filtered). Returns the text with status 'queued'; check ring_get_text for delivery.

  • ring_set_reply_hookSend replies to a webhook endpoint

    Deliver texts people send to a number as JSON (object 'ring.inbound_message': from, to, body, media, optOut) to an Oakhook endpoint (create one with hook_create_endpoint). Pass hookEndpointId null to stop.

  • ring_statusTexting statusread-only

    Check whether live texts (SMS) can go out from this workspace: whether texting is enabled, the plan allows it (not on Free), numbers and their toll-free verification, verified sandbox phones, and the next step. Call this before setting up texting.

Signals

Last release
Oct 11, 2026 (18 days ago)

Details

Registry name
dev.oakstack/oakstack
Version
0.6.0
Auth
Bearer token, API key
Packages
npm oakstack-mcp
License
License unknown
First seen
Oct 24, 2026
Last checked
Oct 24, 2026
Cite this page

Oakstack MCP server. Agent Mart. https://agentmart.dev/connectors/oakstack-dev-oakstack (last updated 2026-10-24)