MCP tools
Every tool a Dokkit server's MCP offers, all 76, grouped by the token access each one needs. Arguments marked * are required.
Find a tool
The address is your server's address with /mcp on the end, and the token goes in Authorization: Bearer. An agent is offered only the tools its token allows.
Read 26
readRead states, issues, jobs and errors. Every token has it.
attentionWhat needs a look right now, what will need one soon, what was found and is not watched, what is snoozed, issues in other environments, and how many things are fine.
findSearch services by name. Optionally only on one machine, in one environment or of one kind. A list longer than limit (default 100) answers {items, next}: pass next as cursor for the following page.
cursorenvironmentkindlimitmachineqserviceOne service: its state, checks, routing, facts, version on each machine, recent deploys, stats and open issue. Takes the id from find.
id *jobsEvery job with its schedule, last run (with done and total while it runs), last good run and next expected run. state is ok, degraded, down or unknown.
cursorenvironmentlimitmachineqservicestatejob_runsThe recent runs of one job, newest first, with their output and, while running, done and total. Takes the job's id from jobs. result is running, ok or fail.
id *cursorfromlimitresulttoerrorsError groups, newest first. With an id from that list, one group with its stack and its individual reports, newest first, paged by cursor.
cursorenvironmentfromidlimitmachineqservicetosince_deployThe latest deploy of one service, and the issues and errors first seen after it. Takes the id from find.
id *machinesEvery machine with its state and what it runs.
cursorlimitmachineqmachineOne machine. Takes the id from machines.
id *issuesIssues, newest first. state is open, snoozed, closed or all; without it, the open and snoozed ones.
cursorenvironmentfromlimitmachineqservicestatetoissueOne issue with its history: opened, notes, acknowledged, snoozed, closed. Takes the id from issues or attention.
id *deploysDeploys of every service, newest first.
cursorenvironmentfromlimitmachineqservicetoversionsThe versions of the apps Dokkit watches, and the apps.
rulesThe alert rules, first match first.
cursorlimitqproposalsThings Dokkit found that a person may accept or dismiss: services, ports, jobs, containers and sites, each with an origin (system, software or yours; absent when the machine's program is too old to say) and the reason. The operating system's own things (origin system) are left out unless system is true, and counted in hidden, in total and for each machine. Answers items, next and hidden.
cursorkindlimitmachineqsystemseriesNumbers over time for one service, or for a machine's own disks, memory and processor when given machine instead of id. Without metric, lists the metric names. from and to are RFC 3339 and default to the last day.
fromidmachinemetricpointstoprocessesA machine's newest process list, taken about once a minute: name, pid, memory (bytes and percent of the machine's memory), processor percent (null on a first sample), path. sort is memory (default) or cpu; q matches name or path; pid picks one process; limit defaults to 50, at most 10,000. Answers at, total_memory_bytes, items and count (all that matched).
machine *limitpidqsortprocess_historyThe top 10 processes by memory or by processor of a machine, one list a minute, up to 24 hours back. kind is memory (default) or cpu; from and to are RFC 3339 and default to the last hour.
machine *fromkindtodayThe last 24 hours in half hours: for each machine, which half hours had something down, something that needed a look, nothing, or no signal, and the issues that opened. to is RFC 3339 and defaults to now.
toalert_settingsThe alert settings: who is told by default, the limits, the night and the mail settings. Addresses, user names and secrets are only shown as set or not set.
alert_peopleThe people alerts can be told, each with their own destinations: email, phone for SMS, iMessage address, ntfy address, Pushover user key and PagerDuty routing key. The ntfy address, Pushover key and routing key are only shown as set or not set.
alert_whoWho is told at each level where someone is named: the default, a rule, a service, a check. Where nothing is named the level above decides, and the default is everyone.
alert_suggestionsChanges Dokkit suggests: an issue that keeps opening and is snoozed, which the daily digest could take instead.
releasesThe program releases this server holds, each with its files and whether it is complete. Only a complete release can be approved.
cursorlimitqcertificateThe certificates this server serves itself: the installed one and the uploaded one, each with its names, issuer, when it runs out, whether it is self-signed and its SHA-256 fingerprint.
downtime_schedulesThe planned downtime scheduled for a machine, each with its id, repeat, time, days, length in seconds, reason, who made it and when it next starts. Takes the id from machines.
id *Read logs 2
read-logsRead what is written in the logs. Switch it on for the token.
logsSearch log lines, newest first. level is that level and worse.
cursorfromlevellimitmachineqservicetoarchivesThe archived months of logs that can be loaded back.
Act 19
actSnooze, mark as seen, watch, plan downtime. Switch it on for the token.
snoozeSnooze an issue until a time (RFC 3339). Takes the issue id from attention.
id *until *acknowledgeMark an issue as seen.
id *unsnoozeWake a snoozed issue.
id *noteAdd a note to an issue.
id *text *bulkSnooze, unsnooze or acknowledge many issues at once. snooze needs until (RFC 3339).
action *ids *untilwatchStart watching a service. Takes the id from find.
id *unwatchStop watching a service. Its open issues close.
id *routingSet where a service's issues go when it stops (down) and when it struggles (degraded), and with night false whether they wait for morning at night. Each is one channel or a list of channels, each of which sends its own alert; none stands alone. A field left out stays as it was; an empty down or degraded clears the route.
id *degradeddownnightmachine_routingSet how a machine that stops reporting is announced: down is one channel or a list (empty for the server-wide choice for down), and night false holds the alert until the night ends (true, the default, wakes someone). A field left out stays as it was.
id *downnightholdHold a service at a version, so a newer one is not offered. An empty or missing version lets it go.
id *versionaccept_proposalAccept found services and ports: one (id), some (ids) or every one waiting and shown (all true; the operating system's own only with system true). Takes the ids from proposals; a hidden one can be accepted by id.
allididssystemdismiss_proposalDismiss proposals: one (id), some (ids) or every one waiting and shown (all true; the operating system's own only with system true). Takes the ids from proposals; a hidden one can be dismissed by id.
allididssystemkeep_messagesKeep the text of a service's errors from now on, or stop keeping it.
id *keep *set_job_timingSet when a job counts as late (grace) and as run too long (max_runtime), such as 30m or 2h. A field left out stays as it was; an empty one clears it. A job from a dokkit.toml is changed in the file.
id *gracemax_runtimescan_machineAsk an enrolled machine to look itself over again and send what it finds to proposals. Read-only on the machine; nothing found is watched until accepted. Takes the id from machines. Answers with the run id; a program too old to know it refuses.
id *plan_downtimeSay an enrolled machine is going down on purpose, such as for a restart: for the time given, `for` (such as 15m, at most 4h), it opens no issue for going silent or for its checks failing, and sends nothing. When the time is up the usual rules resume at once. A second call replaces the window; `for` of 0 ends it. Issues already open stay open. Takes the id from machines.
for *id *reasonend_downtimeEnd a machine's planned downtime now. Takes the id from machines.
id *schedule_downtimeSchedule planned downtime for an enrolled machine, so it starts by itself. repeat is once (with at, an RFC 3339 time), daily or weekly (with time, such as 02:00 in the server's night time zone, or UTC when none is set; weekly also takes days, 1 for Monday to 7 for Sunday). `for` is the length (such as 30m, at most 4h). A window it starts is not ended early when the machine comes back. Takes the id from machines.
for *id *repeat *atdaysreasontimeremove_scheduled_downtimeRemove a scheduled planned downtime. Takes the id from machines and the schedule from downtime_schedules.
id *schedule *Admin 29
adminEverything you can do: keys, people, rules, checks. A full-control token, made only after you type the server's address.
add_ruleAdd an alert rule at the end of the list. kind is job, check, machine or empty for anything; state is down, degraded or empty for both.
channelchannelskindmachinestateupdate_ruleChange an alert rule. A field left out stays as it was; an empty one clears it. Takes the id from rules. on false switches the rule off.
id *channelchannelskindmachineonstatedelete_ruleDelete an alert rule.
id *set_checksReplace the checks added in the interface for a service. Checks from a file are left alone.
checks *id *allow_restartAllow or forbid restarting a service from Dokkit.
allow *id *keysEvery key and token, with its kind, label and scopes. Never the key text.
cursorfromkindlimitmachineqtomake_keyMake a key. kind user needs label and scopes, app needs service, enrol takes an optional machine name. The key text is returned once.
kind *labelmachinescopesservicerevoke_keyRevoke a key. Takes the id from keys.
id *peopleThe people who can sign in, with their roles.
cursorlimitqadd_personAdd a person who can sign in.
name *password *role *remove_personRemove a person. Takes the id from people.
id *update_programAsk an enrolled machine to fetch the newer dokkit program. A person finishes the update on the machine. Takes the id from machines.
id *set_certificatePut a certificate for a real name in place: cert is the PEM of the certificate followed by its chain, key is its PEM private key. It is served at once to clients that ask for one of its names.
cert *key *remove_certificateRemove the uploaded certificate.
certificate_settingsThe settings for getting and renewing the uploaded certificate by itself: the DNS name, the certificate authority's directory, and whether a Cloudflare token is set. The token is never shown.
set_certificate_settingsChange those settings: acme_name (such as example.dokkit.dev), acme_cloudflare_token (a Cloudflare API token that may edit DNS in the name's zone; an empty one clears it) and acme_directory (Let's Encrypt production when empty). A setting left out stays as it was.
acme_cloudflare_tokenacme_directoryacme_namerenew_certificateGet a certificate for acme_name now from the certificate authority, proving the name with a DNS record at Cloudflare. It can take a few minutes. Answers with the certificates, or the reason it failed.
update_machineAsk the updater on a machine to move to a release this server holds completely, such as v1.2.3. Takes the id from machines and the version from releases. Only a signed release installs.
id *version *update_allAsk the updater on every machine that has one to move to a release this server holds completely, such as v1.2.3.
version *add_appAdd an app that runs on many machines, such as a desktop program. Its key is returned once and goes into the app's build.
name *add_dependencyAdd something outside that is depended on, such as a payment service. With check, a machine that runs dokkit (machine) tests it: {type http, url} or {type tcp, address host:port}. Without a check it belongs to the group Outside.
name *checkmachineadd_jobAdd a job to watch. The key and the addresses the job calls are returned once. schedule is a cron line read as UTC; grace and max_runtime are times such as 30m.
machine *name *gracemax_runtimescheduleset_alert_settingsChange alert settings. A setting left out stays as it was; an empty secret clears it. If the address a secret is sent to changes (ntfy_url, smtp_host), send the secret again in the same call or it is cleared, and the answer says so. Addresses must be https, not this machine; mail ports are 25, 465, 587 and 2525.
degradeddigest_atdisk_limitdownemail_toheartbeat_urlimessage_machineimessage_tomail_frommemory_limitnight_fromnight_offsetnight_tonight_zonentfy_tokenntfy_urlpagerduty_keypush_withpushover_tokenpushover_userself_degradedself_downsms_tosmtp_hostsmtp_passwordsmtp_portsmtp_usertwilio_fromtwilio_sidtwilio_tokenwebhook_urltest_alertSend a test alert by one channel, to the server-wide destination or, with person, to that person's. Answers sent, or one fixed reason. A page, or a push through PagerDuty, stays open for two minutes and then resolves itself. Four at once, then one every 25 seconds; a test that stays open costs twice as much: two at once, then one every 50 seconds.
channel *personset_alert_personChange a person's destinations. Takes the id from alert_people. A destination left out stays as it was; an empty one clears it.
id *emailimessagentfy_urlpagerduty_keyphonepushover_userset_alert_whoName who is told at one level. scope is default, rule, service or check; id is the rule, service or check (not for default); for a check, service and name may be sent instead of id; to is a list of person ids from alert_people, or ["everyone"] for the server-wide destinations. An empty list names nobody there, so the level above decides. The check comes before the service, the service before the rule, the rule before the default.
scope *to *idnameserviceaccept_suggestionSend that service's issues to the daily digest from now on. Takes the id from alert_suggestions.
id *dismiss_suggestionDismiss an alert suggestion. Takes the id from alert_suggestions.
id *restore_archiveLoad an archived month of logs back for a week. Takes the name from archives.
name *