Skip to content
Agentmart
Submit a tool

YunoHost MCP

Nostr-authenticated MCP server for secure YunoHost administration.

Connector by imattau · GitHub account verified by the MCP Registry

IndexedAGPL-3.0Local (stdio)★ 1
Write a review

Install

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

npx agentmarket install connector/imattau-yunohost-mcp

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.

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

Nostr-authenticated MCP server for secure YunoHost administration.

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
50 read · 46 write · 10 delete · 16 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Python package

Tools by what they do 122

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

Read 50 · Look things up without changing anything.

  • app_config_get
  • app_info
  • app_resources
  • app_setting_get
  • approval_get
  • approval_status
  • apps_list
  • audit_get
  • audit_list
  • catalog_announcement_status
  • catalog_list
  • catalog_package_inspect
Show 38 more tools
  • catalog_verify
  • diagnosis_get
  • domain_cert_info
  • domain_dns_suggest
  • domains_list
  • firewall_is_open
  • firewall_list
  • health_check
  • incident_snapshot
  • journal_query
  • memory_get
  • memory_list_contexts
  • memory_recall
  • migrations_list
  • migrations_state
  • network_snapshot
  • operation_logs
  • operation_status
  • operations_list
  • package_inspect
  • package_logs
  • plan_app_upgrade
  • regenconf_pending
  • server_identity
  • server_info
  • service_history
  • service_status
  • services_list
  • settings_get
  • settings_list
  • system_snapshot
  • user_group_list
  • user_permission_info
  • user_permission_list
  • users_list
  • validate_server
  • web_logs
  • whoami

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

  • app_change_url
  • app_config_set
  • app_install
  • app_upgrade
  • approve_operation
  • armada_join_draft
  • armada_join_submit
  • backup_create
  • backup_info
  • backup_restore
  • backups_list
  • catalog_announce_draft
Show 34 more tools
  • catalog_announce_submit
  • catalog_publish
  • catalog_publish_plan
  • diagnosis_run
  • domain_add
  • domain_cert_install
  • domain_dns_push
  • domain_dns_push_preview
  • execute_plan
  • firewall_close
  • memory_feedback
  • memory_store
  • migrations_run
  • native_control_plane_call
  • package_backup_test
  • package_change_url_test
  • package_install_test
  • package_restore_test
  • package_upgrade_test
  • regenconf_apply
  • safe_upgrade
  • service_restart
  • service_start
  • service_stop
  • settings_set
  • sign_nostr_event
  • system_upgrade
  • updates_check
  • updates_refresh
  • user_create
  • user_group_create
  • user_permission_add
  • user_permission_update
  • user_update

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

  • app_remove
  • app_setting_set
  • backup_delete
  • domain_remove
  • package_remove_test
  • package_run_tests
  • user_delete
  • user_group_delete
  • user_group_update
  • user_permission_remove

Not yet classified 16 · We could not tell from the name and description.

  • armada_join
  • catalog_announce
  • diagnose_app
  • firewall_open
  • firewall_reload
  • http_probe
  • memory_context
  • memory_thread
  • package_lint
  • package_test_prepare
  • repair_app
  • service_logs
Show 4 more tools
  • ssh_diagnose
  • system_reboot
  • system_shutdown
  • test_package

Files it touches

  • Any path the agent passes to its tools

Tools (122)

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

  • app_change_url

    Move an installed YunoHost app to a new domain and/or path, in place. Unlike app_remove + app_install, this preserves the app's data and settings - it only reruns the app's own scripts/change_url. Fails with app_change_url_no_script if the app doesn't ship one. Some apps' change_url script only updates the reverse-proxy config and doesn't rebuild app-specific assets that were baked in for the old path - check the package (or ask the user) before assuming this alone is sufficient.

  • app_config_get

    Read an installed app's config-panel settings. Call with full=True first to see the panel's schema, labels, and current values before calling app_config_set - `key` there must be the exact dotted "<panel>.<section>.<option>" id this returns, not a label or bare option name. An app with no config panel returns an empty config, not an error.

  • app_config_set

    Set one config-panel setting on an installed app. Requires confirmation. `key` must be the exact dotted "<panel>.<section>.<option>" id from app_config_get(app, full=True) - a panel can reuse the same bare option name across sections, so a shortened key can silently target the wrong setting. Applying typically restarts the app's service.

  • app_info

    Return details (manifest, settings, permissions, upgradability) for one installed app.

  • app_install

    Install a YunoHost app.

  • app_remove

    Remove an installed YunoHost app. Requires confirmation and a recent backup archive.

  • app_resources

    Return the declared YunoHost resources for one installed app.

  • app_setting_get

    Read one key from an installed app's settings.yml. Narrower and more primitive than app_config_get: this reads whatever an app's install/upgrade scripts stashed directly in settings.yml (e.g. install_dir, a generated port, a leftover value from a botched change_url) - not limited to keys a config_panel.toml declares, which most apps don't have at all.

  • app_setting_set

    Write or delete one key in an installed app's settings.yml. Requires confirmation. Exactly one of `value` or `delete=True` must be given.

  • app_upgrade

    Upgrade one installed YunoHost app, or all upgradable apps if none is specified. `url` is a Git URL to upgrade from - required for an app that isn't in any registered catalog (installed directly via a repo URL rather than the catalog), since without it there's no source to diff against and this fails with "No apps can be upgraded". Only valid together with a single `app`. Blocked (PolicyViolation, not confirmable) unless a recent backup exists and there is enough free disk space - see policy.toml / policy/rules.py's DEFAULT_POLICY["apps.upgrade"].

  • approval_get

    Authoritative record for a pending confirmation (owner-approval-plan.md). The external NIP-46 approval helper calls this before asking the owner to sign anything, so it reviews server-computed data - operation_hash included - rather than trusting whatever the requester claims out of band. Any argument, target, or operation_hash mismatch between what the helper displays and what it's about to sign should be treated as an invalidated approval.

  • approval_status

    Lightweight poll for whether a pending confirmation (owner-approval-plan.md) has been owner-approved yet - the same access rule as approval_get, without the full operation plan, for a requester that just wants to know whether to retry the original call yet. Call this in a loop yourself after a require_owner_signature call returns confirmation_required (see that response's own "next_step") - push_approval.py may resolve it within seconds via the owner's paired signer, with no human needing to report back that it happened. Poll at a reasonable interval (a few seconds, not a tight loop) until ap…

  • approve_operation

    Owner co-signature (PLAN.md Phase 13; owner-approval-plan.md's `solo` profile for v1) for a pending high-risk operation (system. upgrade, backups.restore - see policy/rules.py's require_owner_signature). Marks the confirmation approved so its original requester can then execute it by calling the same tool again with this confirmation_id - approving does not execute anything itself. `approval_event` is the kind-24243 event the configured owner signed (via their NIP-46 signer) with `confirmation_id` and `operation_hash` tags - the store verifies its signature, that it is authored by the configu…

  • apps_list

    List installed YunoHost apps.

  • armada_join

    Explicitly accept the configured Armada invite for the caller's identity. This publishes only that identity's self-signed Guestbook Join - the caller's own armada_key_path if identity.toml sets one, otherwise the shared bot key. It does not grant roles, post an announcement, or imply that the signer holds private channel keys not present in the invite bundle. An identity with its own armada_key_path must call this itself before catalog_announce will find it already joined.

Show 107 more tools
  • armada_join_draft

    Prepare a Guestbook Join for the *caller* to sign and submit. Unlike armada_join (which signs with a server-held bot key), this authors the join as the calling identity's own pubkey - no bot key or armada_key_path needed for this identity at all, since community membership under this scheme is a signature over shared, already server-held invite/channel material, not a separately provisioned key. Returns an unsigned kind-20013 seal event to sign locally and a draft_id to pass to armada_join_submit along with the signed result.

  • armada_join_submit

    Finish and publish a Guestbook Join drafted by armada_join_draft. ``signed_event`` must be the JSON-encoded event returned by signing the exact unsigned_event armada_join_draft handed out - any drift, an invalid signature, or a draft_id issued to a different identity is rejected.

  • audit_get

    Return one audit trail entry by id. Requires Scope.AUDIT_READ (app-admin and above) plus owner co-signature per call: unlike other confirmed reads, this isn't gated for the caller's own protection - it's gated because the trail exposes every *other* identity's calls too, so the owner approves each read rather than it being a standing grant.

  • audit_list

    List audit trail entries, newest first. Requires Scope.AUDIT_READ (app-admin and above) plus owner co-signature per call - see audit_get.

  • backup_create

    Create a new local backup archive.

  • backup_delete

    Permanently delete one local backup archive. Requires owner approval.

  • backup_info

    Details for one backup archive - creation time, description, size, and its on-disk `path` - and, with `with_details=True`, the apps and system parts it actually contains. Read-only. There is no MCP tool to fetch the archive's bytes: `path` is where an admin retrieves it from (e.g. over SSH/SCP/SFTP) - YunoHost's own backup_download is an HTTP-file-serving action tied to its REST API, not something meaningfully callable as a plain function.

  • backup_restore

    Restore from a local backup archive. Requires confirmation.

  • backups_list

    List available backup archives.

  • catalog_announce

    Optionally announce a successful catalogue publication in Armada.

  • catalog_announce_draft

    Prepare a package announcement for the *caller* to sign and submit. Unlike catalog_announce (which signs with a server-held bot key), this authors the announcement as the calling identity's own pubkey. It needs only the shared Armada community invite (already required for catalog_announce/armada_join) - no bot key or armada_key_path for this identity at all. The caller must already hold a Guestbook Join under its own pubkey (see armada_join_draft/armada_join_submit) for the result to be recognized by the community. Returns an unsigned kind-20013 seal event for the caller to sign with its own…

  • catalog_announce_submit

    Finish and publish a package announcement drafted by catalog_announce_draft. ``signed_event`` must be the JSON-encoded event returned by signing the exact unsigned_event catalog_announce_draft handed out - any drift in pubkey/kind/tags/content/created_at, an invalid signature, or a draft_id issued to a different identity is rejected.

  • catalog_announcement_status

    Check durable delivery state for one announcement idempotency key.

  • catalog_list

    List every app currently declared in the Nostr catalogue - not just what's installed on this server. Queries the configured relays fresh on every call (no local cache), applying the same trusted-publisher policy nostr-catalogd itself uses when more than one publisher has declared the same app id.

  • catalog_package_inspect

    Inspect a local or remote YunoHost package for catalogue publication.

  • catalog_publish

    Publish an existing catalogue plan after administrator confirmation. If the plan was built with ci_result (see catalog_publish_plan), the same CI attestation is published alongside the declaration here, signed by the same publisher key - nothing further to pass at this step.

  • catalog_publish_plan

    Build a signed catalogue declaration without contacting any relay. ci_result is optional: a ci-result.json body (internal/ciresult schema in nostr-yunohost) for this exact revision - e.g. the artifact static-security.yml produces. When given, the plan also builds a kind-30080 CI attestation for the same revision, signed by the same publisher key - self-attestation, folded into the normal publish flow rather than a separate tool or a second verifier identity. The plan refuses to build (and catalog_publish will refuse to publish) if ci_result's app_id/repository/commit/manifest/content don't ma…

  • catalog_verify

    Verify a signed declaration event or fetch and verify an naddr.

  • diagnose_app

    One-call app diagnostic: app info, the server's current diagnosis, and recent operation log entries mentioning this app. Read-only.

  • diagnosis_get

    Return the current (cached) aggregated diagnosis report.

  • diagnosis_run

    Trigger a fresh YunoHost diagnosis run. Can take real time (network/port checks).

  • domain_add

    Register a new domain or subdomain on this YunoHost server - a prerequisite for app_install's `domain` question, which only accepts already-registered domains. Always adds a plain custom domain, never subscribes to a new top-level DynDNS domain (nohost.me/noho.st/ynh.fr) even if the name would otherwise qualify - a same-host subdomain of an already-registered DynDNS domain (e.g. new-app.example.nohost.me) is unaffected and works normally. A self-signed certificate is always installed immediately. install_letsencrypt_cert additionally attempts a real Let's Encrypt certificate - this only relia…

  • domain_cert_info

    Read-only certificate status for an already-registered domain (must already appear in domains_list()): CA type/name, remaining validity in days, a style/summary badge, whether it's ACME-eligible right now, and whether a wildcard covers it - the checks worth doing before calling domain_cert_install.

  • domain_cert_install

    Issue or renew a certificate for an existing domain (must already be registered - see domain_add/domains_list) via YunoHost's own certificate-install path, not a remove-and-recreate of the domain. `letsencrypt=True` (default) requests a real Let's Encrypt certificate; `letsencrypt=False` installs a self-signed one instead. `staging` must be passed explicitly and must be False - this YunoHost version has no ACME staging endpoint configured, so staging=True is rejected rather than silently falling back to production. Check the response's `certificate.CA_type` ("letsencrypt" vs "selfsigned") an…

  • domain_dns_push

    Push domain_dns_suggest's recommended records to the domain's configured DNS registrar. Requires a registrar to already be set up via the domain's own `dns.registrar` config panel (`app_config_get`/ `app_config_set` don't cover per-domain config panels - this fails with a clear error if none is configured, it does not silently no-op). Call domain_dns_push_preview first, always - it shows the exact same diff this call would apply, without touching anything. Without `force`, only records YunoHost itself previously created are touched; `force=True` extends that to any matching record regardless o…

  • domain_dns_push_preview

    Compute what domain_dns_push would actually change on the domain's configured DNS registrar - a create/update/delete/unchanged diff against the records currently live there - without touching anything. Read-only; requires the domain to already have a registrar configured (fails clearly if not - see domain_dns_push's docstring). Without `force`, the diff only considers records YunoHost itself previously created; `force=True` extends that to any matching record regardless of origin, matching what domain_dns_push would do with the same flag. Always call this before domain_dns_push, especially wit…

  • domain_dns_suggest

    Suggest DNS records for an already-registered domain - basic A/AAAA, mail (MX/SPF/DKIM/DMARC), and any extra records YunoHost's installed apps contribute - as a formatted zone-file-style block of text, the same output `yunohost domain dns suggest` prints. Read-only, computed locally from this server's own state; does not contact or compare against the domain's actual registrar (see domain_dns_push_preview for that). Useful to hand the user something to paste at their DNS provider by hand, or to sanity-check before domain_dns_push.

  • domain_remove

    Remove a registered domain. Refuses to run - and lists the offending apps - if any app is still installed on this domain, unless `remove_apps=True`, which removes those apps too as part of the same call (each one via its own app_remove-equivalent path, with the same data loss that implies - check apps_list for this domain first). Cannot remove the main domain while any other domain still exists. `force` skips YunoHost's own domain-existence assertion (only meaningful for cleaning up a domain left in a broken half-added state, per domain_add's own `force` semantics - not a way to bypass the app…

  • domains_list

    List domains configured on this YunoHost server.

  • execute_plan

    Execute a plan previously returned by plan_app_upgrade(). Re-checks apps.upgrade's hard policy at execute time, not just at plan time - state (free space, backup age) may have drifted in between.

  • firewall_close

    Close a port. `protocol` is "tcp" or "udp"; `port` may be a dash-separated range. Requires confirmation and owner co-signature - see the warning in the confirmation plan before approving this on port 22/80/443.

  • firewall_is_open

    Return whether a port is open. `protocol` is "tcp" or "udp". Read-only.

  • firewall_list

    List firewall rules. `protocol` is "tcp" or "udp" (ignored if `raw`); `forwarded` lists UPnP-forwarded ports instead of open ports. Read-only.

  • firewall_open

    Open a port. `protocol` is "tcp" or "udp"; `port` may be a dash-separated range. Requires confirmation and owner co-signature - a wrong port/protocol here is externally visible and reachable, same risk tier as system_upgrade/backup_restore.

  • firewall_reload

    Re-apply the full current firewall rule set. Requires confirmation and owner co-signature, same tier as firewall_open/firewall_close - this is the point at which any pending rule change actually takes effect.

  • health_check

    Return a summary YunoHost diagnosis report.

  • http_probe

    Probe an HTTP(S) endpoint and return status, timing, and content type.

  • incident_snapshot

    Collect the main read-only evidence for one incident time window.

  • journal_query

    Query allowlisted system journals, including kernel, OOM, SSH, fail2ban, firewall, systemd, and application units.

  • memory_context

    Assemble bounded working context from Polypack.

  • memory_feedback

    Record whether a Polypack memory helped this authenticated agent.

  • memory_get

    Return one Polypack memory by exact ID.

  • memory_list_contexts

    List Polypack context namespaces visible to the local store.

  • memory_recall

    Recall bounded Polypack memories for an authenticated agent.

  • memory_store

    Store durable Polypack memory with server-authored provenance.

  • memory_thread

    Walk a bounded Polypack response/supersession thread.

  • migrations_list

    List known migrations. `pending`/`done` filter; the default (neither set) returns all of them. Read-only - same scope as updates_check.

  • migrations_run

    Run (or skip, or force-rerun) migrations. Defaults to all pending migrations if `targets` is empty. `skip` and `force_rerun` require explicit `targets` (never applied to "all pending"). Requires confirmation and owner co-signature - same tier as system_upgrade.

  • migrations_state

    Return the recorded state (done/pending/skipped) of every migration that has ever run on this server. Read-only.

  • native_control_plane_call

    Submit a registered YunoHost operation to the signed Nostr control plane. The operation daemon performs the final scope and administrator approval checks; this MCP server never executes the operation locally. Enable with ``YUNOHOST_MCP_NATIVE_CONTROL_PLANE_ENABLED=true`` and provision the dedicated agent key at the configured key path.

  • network_snapshot

    Return local addresses, routes, and listening sockets.

  • operation_logs

    Return the log content for one YunoHost operation - most recent `tail_lines` lines only (default: a bounded tail, not the whole log; pass a larger tail_lines for more). Secret-shaped content (a password/token/api_key/... assignment) in the log text is redacted.

  • operation_status

    Return success/failure status and metadata for one YunoHost operation.

  • operations_list

    List recent YunoHost operation log entries. with_suboperations defaults to False (matching yunohost's own default), which silently excludes any operation with a parent operation set - in practice this hides most app config-panel action/button clicks, since those commonly inherit a parent from whatever operation context the webadmin was already in. Pass with_suboperations=True to see those too.

  • package_backup_test

    Create a backup of an installed test app, to verify its backup script works.

  • package_change_url_test

    Move a test app to a new domain/path, to verify its change_url script works.

  • package_inspect

    Return the manifest and declared resources for a candidate package. `source` is a local path or git URL (not the app catalog) - does not install anything.

  • package_install_test

    Install a candidate package from a local path/git URL, for testing.

  • package_lint

    Run the upstream package_linter against a local package path. Returns {"unavailable": true} rather than an error if no package_linter checkout is configured (YUNOHOST_MCP_PACKAGE_LINTER_PATH) - it's optional tooling, not part of yunohost core.

  • package_logs

    Return the log for one operation - an alias over operation_logs() for the package-development workflow (PLAN.md Phase 8). See that tool's docstring for the default tail size and log-text redaction.

  • package_remove_test

    Remove a test app, to verify its remove script works. Purges data by default.

  • package_restore_test

    Restore a test app from a backup archive, to verify its restore script works.

  • package_run_tests

    Run the standard install -> backup -> remove -> restore -> remove cycle against a candidate package in one call. Stops at the first failing step; see yunohost/adapter.py's package_run_tests for exactly what each step does and why this isn't package_check's full CI matrix.

  • package_test_prepare

    Prepare a short-lived package-test session without changing the host. The returned session binds later package-test writes to this exact source, app id, and requester identity. ``app`` is required when preparing a test against an already-installed app; otherwise it is read from the candidate manifest.

  • package_upgrade_test

    Upgrade an already-installed `app` from a candidate local path/tarball, for testing.

  • plan_app_upgrade

    Report what an upgrade of `app` would involve, without doing it: current/target version, and whether apps.upgrade's policy (recent backup, free space) would currently block it and why. Pass the returned plan_id to execute_plan() to actually upgrade - read-only, no lock, no audit entry (nothing in YunoHost changes here).

  • regenconf_apply

    Regenerate (apply) pending system-service config files. `names` restricts this to specific categories (default: all pending); `force` additionally overwrites manually-edited files. Requires confirmation and owner co-signature, same tier as firewall_open/firewall_close - a bad regeneration can lock the admin out the same way a bad firewall rule can.

  • regenconf_pending

    List system-service config files (nginx, ssowat, mysql, ...) that are out of date versus YunoHost's current internal state, without changing anything. `names` restricts the check to specific categories (default: all); `with_diff` includes the actual diff text. Read-only - call this before regenconf_apply to see what would change.

  • repair_app

    Diagnose an app and attempt bounded remediation. Only "conservative" is implemented: restart services whose name contains this app id, then re-diagnose - no reinstall, upgrade, or forced removal regardless of findings.

  • safe_upgrade

    PLAN.md Phase 14's flagship workflow: diagnosis -> inspect app -> create a fresh safety backup -> upgrade -> check app/HTTP endpoint -> re-diagnose -> one report. Runs through apps.upgrade's own policy: free space is checked up front (nothing in this workflow can create disk space), and the backup requirement is re-verified after this workflow's own backup step actually happens, not just assumed to have worked.

  • server_identity

    Return this server's own Nostr identity (Phase 12): its npub and hex pubkey. A delegation (Phase 11) must name this exact pubkey in its 'server' tag to be accepted here. No scope required - this is public information a caller needs *before* it can construct a valid delegation naming this server, not something to gate behind auth for this server.

  • server_info

    Return YunoHost server/component version information.

  • service_history

    Return service state, exit details, restart counts, and timestamps.

  • service_logs

    Structured systemd journal entries for one YunoHost-managed service (must be a name services_list() reports) - normalized timestamp/service/priority/message per entry. `since`/`until` accept journalctl's own syntax ("-1h", "2026-09-03 07:00:00", "today", ...). `priority` is a syslog level (emerg/alert/crit/err/warning/notice/info/debug, or a range like "err..emerg") - e.g. priority="err..emerg" for error-level entries only. `grep` filters by a text/regex pattern. `lines` caps how many of the most recent matching entries come back (server-enforced maximum applies regardless of what's requested…

  • service_restart

    Restart one or more YunoHost services.

  • service_start

    Start one or more stopped YunoHost services.

  • service_status

    Return status for one or more named services.

  • service_stop

    Stop one or more YunoHost services. Call service_start to bring them back up.

  • services_list

    List all YunoHost-managed services and their status.

  • settings_get

    Read one global setting by key (see settings_list for known keys). `full` additionally returns its type/description/default. Read-only.

  • settings_list

    List YunoHost's global settings (SSO behavior, security toggles, misc display options) and their current values. `full` additionally returns each setting's type/description/default. Read-only.

  • settings_set

    Set one global setting (see settings_list for known keys). `value` is always passed as a string - YunoHost coerces it to the setting's actual type internally. Requires confirmation and owner co-signature, same tier as firewall_open/firewall_close.

  • sign_nostr_event

    Sign one small Nostr event locally with this bridge's own key - the same key it already uses to sign every NIP-98 request - without the key ever leaving this process. Only Concord seal events (kind 20013) are accepted: pass the exact unsigned_event returned by catalog_announce_draft or armada_join_draft, then hand the signed result to the matching *_submit tool.

  • ssh_diagnose

    Collect SSH listener, fail2ban, firewall, service, and auth evidence.

  • system_reboot

    Reboot the host (`systemctl reboot`) immediately once confirmed - no further in-process delay or grace period. Requires confirmation and owner co-signature, same tier as system_upgrade. Comes back up on its own; contrast with system_shutdown, which does not.

  • system_shutdown

    Power off the host (`systemctl poweroff`) immediately once confirmed. Requires confirmation and owner co-signature, same tier as system_upgrade. Does NOT come back up on its own - without remote power management, someone needs physical access to the machine to restore it. Prefer system_reboot unless a real power-off is actually what's wanted.

  • system_snapshot

    Return host uptime, boot, resource, process, disk, and OOM evidence.

  • system_upgrade

    Upgrade system (OS-level) packages. Requires confirmation.

  • test_package

    Alias for package_run_tests() - PLAN.md Phase 14 names this separately from Phase 8's package_run_tests, but it's the same install -> backup -> remove -> restore cycle; see yunohost/adapter.py's package_run_tests for what each step does.

  • updates_check

    List apps and system components with pending updates, from cache (no network refresh).

  • updates_refresh

    Refresh cached update metadata over the network: apt-get update and/or a re-fetch of every registered app catalog source (including a local nostr_catalog feed, if installed), then report what's now upgradable. target is "apps", "system", or "all". Can take real time. Use this after catalog_publish to confirm a package actually shows up in the live catalog - updates_check alone only reads the existing cache and won't see a just-published change.

  • user_create

    Create a YunoHost user account/mailbox on `domain` (must already be registered - see domain_add/domains_list). `admin` adds the new user to the `admins` group, granting webadmin/SSH access - grant with care.

  • user_delete

    Delete a YunoHost user account. Requires owner co-signature (approve_operation) in addition to confirmation - see PLAN.md Phase 13.

  • user_group_create

    Create a new YunoHost user group - a prerequisite for granting a custom set of users access to an app permission (see user_permission_add) rather than an individual username.

  • user_group_delete

    Delete a YunoHost user group. Requires owner co-signature (approve_operation) in addition to confirmation - see PLAN.md Phase 13.

  • user_group_list

    List YunoHost user groups (e.g. `all_users`, `admins`, and any per-app permission groups) and their members.

  • user_group_update

    Add or remove usernames from a YunoHost group (e.g. adding a user to `admins` grants webadmin/SSH access - grant with care).

  • user_permission_add

    Grant a user or group access to an app permission (e.g. "myapp.main" - see user_permission_list for existing permission names). Requires owner co-signature (approve_operation) in addition to confirmation - see PLAN.md Phase 13's "permission changes" candidate.

  • user_permission_info

    Read one permission's full info (allowed users/groups, label, show_tile, protected, URL(s)) - see user_permission_list for known permission names. Read-only.

  • user_permission_list

    List app/system permissions and which users/groups are allowed each one (e.g. which apps a given group can access).

  • user_permission_remove

    Revoke a user or group's access to an app permission. Requires owner co-signature (approve_operation) in addition to confirmation - see PLAN.md Phase 13's "permission changes" candidate.

  • user_permission_update

    Update a permission's label or dashboard tile visibility (`show_tile`) - not who has access, use user_permission_add/ user_permission_remove for that. Leave an argument None to leave it unchanged. `protected` is accepted for backward compatibility but, on the currently-installed YunoHost version, raises rather than silently doing nothing - the real user_permission_update() has no such parameter; protected is only settable via user_permission_add/ user_permission_remove, alongside a names change. `protected=False` on a permission that's meant to require login is a real access-control change, no…

  • user_update

    Update an existing YunoHost user's mail/password/quota/fullname. Only the fields passed are changed; omitted fields are left as-is.

  • users_list

    List YunoHost user accounts.

  • validate_server

    A broad server health snapshot in one call: version info, diagnosis, pending updates, service status, and backup archives. Read-only.

  • web_logs

    Read bounded, structured Nginx access and error logs.

  • whoami

    Return the caller's resolved Nostr identity: pubkey, name, roles, and scopes. Requires no scope of its own — any authenticated, identity.toml-mapped caller may ask who they are, even one whose roles grant nothing else. Only meaningful over the HTTP transport; over stdio there is no NIP-98 handshake, so this returns unauthenticated.

Signals

Stars
1
Forks
0
Open issues
0
Weekly downloads
170
Last commit
Sep 15, 2026 (1 month ago)
Last release
Sep 7, 2026 (1 month ago)
Last package publish
Sep 8, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.imattau/yunohost-mcp
Version
0.8.46
Auth
No auth
License
AGPL-3.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from imattau

Cite this page

YunoHost MCP. Agent Mart. https://agentmart.dev/connectors/imattau-yunohost-mcp (last updated 2026-10-24)