beszel-mcp
Integrates with the PocketBase API used by Beszel to query monitored systems, containers, alerts, and historical stats.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@beszel-mcplist systems with status up"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Beszel MCP Server
A Model Context Protocol server for the Beszel system/container monitoring tool. Run it with npx — no git clone required.
Built on the same PocketBase API used by the Beszel Raycast extension and inspired by Red5d/beszel-mcp.
Tools
Tool | Description |
| List monitored systems with status and metadata |
| List monitored containers |
| List configured alerts |
| List triggered alert history |
| Query CPU, memory, disk, and network stats for a system |
| Query CPU, memory, and network stats for a container |
All list tools support PocketBase filter, sort, and pagination.
Related MCP server: weather
Configuration
Set these environment variables:
Variable | Required | Description |
| Yes | Beszel/PocketBase URL (e.g. |
| No | Admin email for authentication |
| No | Admin password for authentication |
Installation
No git clone required. The server runs from the published npm package:
npx -y beszel-mcpUsage
Cursor / Claude Desktop
Add to your MCP config. Use the npm package name beszel-mcp — not a local path:
{
"mcpServers": {
"beszel": {
"command": "npx",
"args": ["-y", "beszel-mcp"],
"env": {
"BESZEL_URL": "http://localhost:8090",
"BESZEL_EMAIL": "your-email@example.com",
"BESZEL_PASSWORD": "your-password"
}
}
}
}Contributing / local development
npm install
npm run build
npm startOr run without building:
npm install
npm run devMCP Inspector
npm run inspectPocketBase filter examples
name ~ 'server'
status = 'up'
created >= '2024-01-01' && created <= '2024-12-31'
(cpu > 80 || memory > 90) && status = 'active'License
MIT
Available Tools
6 toolslist_alert_historyList Beszel Alert HistoryARead-onlyIdempotent
List historical records of triggered alerts in Beszel.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| per_page | No | Number of results per page (default: 50) | |
| filter | No | PocketBase filter string (e.g. "name ~ 'server'" or "status = 'up'") | |
| sort | No | Sort order (e.g. "-created" for descending by created date) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no further behavioral context beyond stating the action is listing historical records. This is adequate given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous words. It is well-front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with 4 parameters and no output schema, the description is adequate but minimal. It does not explain the filtering syntax or return format, though these are covered in the schema. Annotations provide safety context. Overall, it is marginally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not elaborate on parameters; it relies entirely on the schema. This meets the minimum but adds no extra clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List historical records of triggered alerts in Beszel', clearly identifying the verb (list) and resource (historical alert records). It distinguishes from sibling tools like list_alerts by specifying 'historical'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., list_alerts for current alerts). The description does not mention any prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alertsList Beszel AlertsARead-onlyIdempotent
List all configured alerts in Beszel including thresholds and notification settings.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| per_page | No | Number of results per page (default: 50) | |
| filter | No | PocketBase filter string (e.g. "name ~ 'server'" or "status = 'up'") | |
| sort | No | Sort order (e.g. "-created" for descending by created date) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, which cover safety. The description adds value by specifying that alerts include thresholds and notification settings, going beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with full schema and annotations, the description is mostly complete. It could mention that the tool supports pagination and filtering (covered in schema), but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description does not add any additional meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List) and the resource (all configured alerts in Beszel), including what is covered (thresholds and notification settings). It distinguishes from sibling tools like list_alert_history, which lists history rather than configurations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_alert_history. No exclusions or context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_containersList Beszel ContainersARead-onlyIdempotent
List all monitored containers running on Beszel-managed systems.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| per_page | No | Number of results per page (default: 50) | |
| filter | No | PocketBase filter string (e.g. "name ~ 'server'" or "status = 'up'") | |
| sort | No | Sort order (e.g. "-created" for descending by created date) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no further behavioral context, such as pagination default or response structure, beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is front-loaded with the main action. No redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (listing containers) and annotations cover safety, but the description lacks details about return fields or behavior when no containers are found. With no output schema, more contextual information would be helpful, though the description is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all four parameters described. The description does not add any additional meaning or context for parameters beyond the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all monitored containers running on Beszel-managed systems.' The verb 'list' and resource 'containers' are specific, and the scope 'all monitored containers' differentiates from sibling tools like list_systems or list_alerts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for listing containers, but it does not provide explicit guidance on when to use it versus alternatives (e.g., query_container_stats). It lacks when-not conditions or references to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_systemsList Beszel SystemsBRead-onlyIdempotent
List all monitored systems in Beszel with their status and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| per_page | No | Number of results per page (default: 50) | |
| filter | No | PocketBase filter string (e.g. "name ~ 'server'" or "status = 'up'") | |
| sort | No | Sort order (e.g. "-created" for descending by created date) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds no additional context beyond that, such as pagination behavior or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that efficiently conveys the tool's purpose without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple list tool with no output schema. Could mention pagination or that results are filtered/sortable, but generally complete given annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all 4 parameters. The tool description does not add new parameter information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), resource (systems), and scope (with status and metadata). It effectively distinguishes from sibling tools like list_containers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., query_system_stats for detailed stats). No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_container_statsQuery Container StatisticsARead-onlyIdempotent
Query time-series statistics for a specific container (CPU, memory, network).
| Name | Required | Description | Default |
|---|---|---|---|
| container_id | Yes | The container ID to query statistics for | |
| start_time | No | Start time in ISO 8601 format (e.g. 2024-01-01T00:00:00Z) | |
| end_time | No | End time in ISO 8601 format | |
| page | No | Page number (default: 1) | |
| per_page | No | Number of results per page (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, covering the safety profile. The description adds the specific resource types (CPU, memory, network), which is useful. However, it does not disclose any other behavioral traits like pagination or time series format, but these are partially covered by the input schema parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's action, target, and output scope. Every word earns its place with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description does not explain the response format or specific time-series data structure. While annotations and schema cover safety and parameters, the lack of output information leaves an important gap for an agent to correctly interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all 5 parameters having descriptions. The description does not add any additional meaning beyond what the schema already provides. It mentions time-series stats but no parameter details, so the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries time-series statistics for a specific container and lists resource types (CPU, memory, network). However, it does not explicitly differentiate from its sibling tool 'query_system_stats', which likely provides system-level stats. The purpose is clear but lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (for a container's time-series stats), but no explicit when-to-use or when-not-to-use guidance is provided. It does not mention alternatives like 'query_system_stats' or 'list_containers'. The context signals and sibling list offer some clues, but the description itself is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_system_statsQuery System StatisticsARead-onlyIdempotent
Query time-series statistics for a specific system (CPU, memory, disk, network).
| Name | Required | Description | Default |
|---|---|---|---|
| system_id | Yes | The system ID to query statistics for | |
| start_time | No | Start time in ISO 8601 format (e.g. 2024-01-01T00:00:00Z) | |
| end_time | No | End time in ISO 8601 format | |
| page | No | Page number (default: 1) | |
| per_page | No | Number of results per page (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context about the type of data (time-series, specific resources) and matches the annotations. No contradictions. However, does not mention pagination behavior or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single concise sentence, front-loaded with the main action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should explain what the tool returns. It only mentions 'statistics' without format or structure. The agent would not know the shape of the response (e.g., array of timestamped objects). Incomplete for a tool with 5 parameters and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema fully documents all parameters. The description adds context that the statistics are for CPU, memory, disk, network, but does not add specifics beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool queries time-series statistics for a specific system and lists the types of statistics (CPU, memory, disk, network). This distinguishes it from siblings like list_systems (which lists systems) and query_container_stats (which queries container stats).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., list_systems to get system IDs, query_container_stats for containers). No usage exclusions or prerequisites provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource or action: alerts vs alert history, containers vs systems, and stats queries are clearly separated by entity type.
All tools follow a consistent verb_noun pattern: 'list_' for listing entities and 'query_' for time-series statistics, with no deviations.
6 tools is well-scoped for a monitoring server, covering essential listing and querying operations without being too few or excessive.
The set covers core monitoring tasks (listing resources, querying stats, viewing alerts) but lacks alert management (create/update/delete) or container log access, though these may be out of scope.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
An MCP server giving access to Grafana dashboards, data and more.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for system monitoring, enabling users to ask about CPU, memory, disk, network, and processes on their system.93MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides tools for filesystem, database, web, system, and shell operations, along with resources and prompts via SSE transport.
- AlicenseAqualityAmaintenanceA Linux system monitoring MCP server that provides real-time information on CPU, memory, disk, network, processes, Docker, security, and more via MCP tools.69MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/weeebdev/beszel-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server