Fiskmas

Hosting for AI agents: your AI client deploys Docker apps to live HTTPS URLs over MCP.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
66%
Naming quality
94%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_skill' description lacks action verbin get_skill

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,591Tokens (tool definitions)
~447 BTypical response size
Significant attention impact (2.02% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "fiskmas": {
      "url": "https://mcp.fiskmas.dev/mcp"
    }
  }
}

Remote endpoints

https://mcp.fiskmas.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒whoami

Return the identity of the current token holder (account + provider) plus its subscription plan (free | plus) and the plan's limits: max running projects, per-project memory/CPU caps, log windows, and the project-database fair-use guide. Free plans include an upgrade_url for Plus ($9.99/mo: 5 projects, 512 MB / 1 CPU per project, always-on).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑create_account(email, display_name)

Start onboarding: require an email, create a pending account, and email a human verify link. Does NOT return an API token. The human must click the link; the verify page shows the token once. Then configure Authorization: Bearer <token> on this MCP client (also docker login -u <token> registry.fiskmas.dev). If you already have a token, call whoami instead.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "display_name": {
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒account_status(email)

Poll onboarding state for an email (pending | active | unknown). Use after create_account while waiting for the human to verify.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑reissue_token(email)

Re-issue the API token for an existing account. Provide the email the account was registered with; FiskmΓ₯s emails a fresh one-time verify link to that address. The human clicks it; the verify page shows the new token once (old tokens are revoked immediately). This is the self-service recovery path when a token was lost, rotated, or is being rejected as "invalid or expired". It does not create a new account β€” for a brand-new account use create_account. Rate-limited: a few requests per hour per email.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
πŸ”΄delete_account

Delete the caller's account. Stops and removes all projects (containers, routes, MariaDB) first, then deletes the account. Refuses to leave orphaned runtimes.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑create_project(name, slug)

Create a project and reserve <slug>-app.fiskmas.dev. Slug must match ^[a-z0-9][a-z0-9-]{1,48}$ and is not reserved. Subject to the plan's running-project quota (Free: 1, Plus: 5) β€” on quota the error tells the human how to upgrade or free a slot.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_projects

List the caller's projects with status and URL.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_project(project)

Fetch a single project by id or slug.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
πŸ”΄delete_project(project)

Stop and delete a project. Its slug goes into quarantine for 7 days: you may re-use it immediately, other accounts get a 409 until it is freed.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑set_env(project, env)

Merge environment variables into a project (existing keys are kept). They take effect on the next deploy_project: a restart does NOT re-apply env. The platform-injected DATABASE_URL/MYSQL_* are protected: set_env rejects overriding them and never drops them.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    },
    "env": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_env(project)

List a project's env keys with masked values (never returns full secrets).

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑deploy_project(project, image)

Pull an image by digest and run one container with the plan's cpu/memory caps (Free: 256 MB / 0.2 CPU, Plus: 512 MB / 1 CPU). Only registry.fiskmas.dev images are accepted. Rate-limited to 1 deploy per 5 minutes per account (429 with a retry-seconds hint); use restart_project for a transient crash - it does not count against the limit. Re-deploying a running project is always allowed; starting a second one on Free is blocked until one stops.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    },
    "image": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺstart_project(project)

Start a stopped project's container. Waits until it is ready; a pod that fails to become ready returns a named error.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺstop_project(project)

Stop a running project's container (keep the image).

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺrestart_project(project)

Restart a running project's container. Recreates the pod, re-running the injected-DB resolver gate and the app's storage probes, and waits for readiness: a failed start returns a named error (e.g. an unresolvable DB host) and a plain retry usually clears a transient DNS drop. Not rate-limited. Env changes are NOT picked up by a restart - redeploy instead.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_status(project)

Return project status, url, image digest, and last deploy error.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_logs(project, tail, since)

Return recent container log lines. `tail` = line count (plan default 200; plan max 2000), `since` = time window in seconds (plan window: free 24 h, plus 7 d β€” logs are live-pod streams, not stored history). When both are given, `since` wins.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    },
    "tail": {
      "type": "number"
    },
    "since": {
      "type": "number"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_stats(project, since)

Account-wide or per-project stats for debugging: live CPU/mem vs the plan caps (Free: 256 MB / 0.2 CPU, Plus: 512 MB / 1 CPU) and deploy history. Omit `project` for all of the caller's projects; pass a project id or slug NaNalso returns `resources.history` β€” per-project CPU/mem time series over the window (sampled every ~30 s on the k3s platform; absent on stacks without the metrics collector).

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    },
    "since": {
      "type": "number"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒database_dump(project)

Export the project's platform-provisioned database: starts a cluster-side dump Job in your own tenant namespace (mariadb-dump --single-transaction, zstd-compressed; gzip fallback) writing a compressed artifact to your tenant artifact store. Small dumps finish inline and return metadata + a presigned download URL (expires in ~24 h; the artifact itself is purged after 7 days). Large dumps return a dump_id with status=running β€” poll dump_status. The dump bytes NEVER pass through this tool response. Rate limit: 2 per hour per account.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string"
    }
  },
  "required": [
    "project"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒dump_status(dump)

Report one database_dump job: status pending|running|done|failed. When done, includes the artifact size/compression and the presigned download URL (expires ~24 h after the dump started; null once expired β€” request a new dump). When failed, includes the error reason. Poll this after database_dump returns status=running (large dumps).

Input Schema

{
  "type": "object",
  "properties": {
    "dump": {
      "type": "string"
    }
  },
  "required": [
    "dump"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑send_feedback(message, kind, project, tool)

Report a problem with the FiskmΓ₯s toolset so it can be fixed. Use it when a tool errored or misbehaved, you got stuck and can't proceed, or the instructions/skill were unclear. Do NOT use it for praise. kind=bug means it broke, kind=suggestion means it was unclear or could be better, kind=other is anything else that didn't work. Name the `tool` and, if relevant, the `project`. At most one call per session.

Input Schema

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string"
    },
    "kind": {
      "type": "string"
    },
    "project": {
      "type": "string"
    },
    "tool": {
      "type": "string"
    }
  },
  "required": [
    "message",
    "kind"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_skills

List the platform skills available to the caller.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_skill(name)

Return the bytes of a platform skill by name.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools
verifiedversion not recorded21 tools
verifiedversion not recorded21 tools
verifiedversion not recorded21 tools
verifiedversion not recorded21 tools
verifiedversion not recorded21 tools