simpleinout-mcp
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., "@simpleinout-mcpShow me who is currently checked in"
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.
simpleinout-mcp
Simple In/Out MCP Service — a stateless HTTP MCP server wrapping the Simple In/Out APIv4, covering company info, in/out statuses, users, groups, beacons, geofences, networks, announcements, and roles.
Tech stack: Python 3.12 + uv + FastMCP (Starlette/Uvicorn)
It follows the MSPbots Vendor MCP Service SOP: stateless, no stored credentials, per-request header authentication only (no environment-variable credential fallback on the HTTP path).
Scope
15 tools, going beyond MSPbots' historical usage (which was just 1 endpoint — "Companies") to cover the broader resource catalog, prioritizing the core check-in/check-out status feature plus the read-side of every other resource category the API exposes.
Related MCP server: Hello World MCP Server
Authentication
Simple In/Out's API is pure OAuth2 with no non-redirect alternative (confirmed against the official docs — only authorization_code and refresh_token grants exist; no client_credentials, no API key). However, the redirect step is only needed once, by a human, out-of-band — not by this service at runtime:
One-time setup (a person does this, not the MCP): visit
GET /oauth/authorize?response_type=code&client_id=...&redirect_uri=...&scope=write, log in, approve. Exchange the returnedcodefor anaccess_token+refresh_tokenviaPOST /oauth/tokenwithgrant_type=authorization_code.Ongoing operation (this service does this, per call): exchange the
refresh_tokenfor a freshaccess_tokenviaPOST /oauth/tokenwithgrant_type=refresh_token— this grant needs onlyclient_id+client_secret+refresh_token, no redirect_uri. Since access tokens are cheap to re-mint and this service must stay stateless, it does this on every call rather than caching (no cross-request caching of tokens either — see SOP §3.4).
So the only credentials this service needs are client_id, client_secret, and a refresh_token obtained once via step 1. These values are supplied per-request via HTTP headers only — there is no environment variable or config field for them, and no fallback that would read them from the environment.
Quick Start
Docker (recommended)
docker compose up --buildThe server starts on http://localhost:8080.
Local (uv)
uv sync
python -m simpleinout_mcpHealth Check
curl http://localhost:8080/health
# {"status": "ok"}No credentials are required for the health endpoint (it is a pure local liveness probe and does not call the Simple In/Out API).
HEADER 授权参数说明 (Authentication)
Every request to /mcp must include all three of the following HTTP headers:
Header | 类型 | 是否必填 | 默认值 | 枚举值 | 字段描述 | Example |
| string | 是 | 无 | 无 | Simple In/Out OAuth2 client ID(发邮件到 help@simplymadeapps.com 申请) |
|
| string | 是 | 无 | 无 | Simple In/Out OAuth2 client secret |
|
| string | 是 | 无 | 无 | 一次性人工登录授权换出来的 refresh_token(本服务用它每次调用换新的 access_token,不需要 redirect_uri) |
|
Missing any of the three headers returns 401 Unauthorized with the list of required header names in the response body.
Environment Variables
Non-credential configuration only — see Authentication above for how credentials are supplied.
Variable | Default | Description |
|
| HTTP server listening port |
|
| HTTP server listening host |
|
| Header name the Gateway sends the client ID under (name only, not a credential value) |
|
| Header name for the client secret |
|
| Header name for the refresh token |
MCP Endpoint
POST http://localhost:8080/mcpConnect your MCP client with:
Transport:
http(Streamable HTTP)Headers:
X-SimpleInOut-Client-Id,X-SimpleInOut-Client-Secret,X-SimpleInOut-Refresh-Token(all required)
Available Tools (15)
Tool | Description | Simple In/Out endpoint |
| Get the current company's profile |
|
| List status-change history company-wide |
|
| List the current user's status history |
|
| List a specific user's status history |
|
| Create a new status for the current user (check in/out) |
|
| Create a new status for another user |
|
| List all users, optionally filtered |
|
| Get a specific user |
|
| Get the current authenticated user |
|
| List all groups |
|
| List all beacons |
|
| List all geofences |
|
| List all Wi-Fi networks |
|
| List all announcements |
|
| List all roles |
|
All tools are read-only except simpleinout_create_my_status and simpleinout_create_user_status. page_size on the list_groups/list_beacons/list_fences/list_networks/list_announcements tools is clamped server-side to 200 (Simple In/Out's docs specify a default of 25 but do not document a hard maximum, so the SOP's fallback ceiling is used).
测试示例 (Test Example)
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-SimpleInOut-Client-Id: <client_id>" \
-H "X-SimpleInOut-Client-Secret: <client_secret>" \
-H "X-SimpleInOut-Refresh-Token: <refresh_token>" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "simpleinout_get_current_user", "arguments": {} }
}'Per SOP §12, run initialize → tools/list → tools/call in that order with your own test credentials before considering the service verified end-to-end — /health returning 200 does not imply /mcp is usable.
Known Gaps
⚠️ Not yet tested against a live Simple In/Out account. All 15 tools checked structurally only (MCP handshake, tools-list, schema validity,
/health, gateway 401 credential-gating). Per the parent ClickUp task, the previously-applied API client has expired; a new one has been requested via email (registering MSPbots' own MCP Management Service OAuth callback URLs as the redirect URIs) and is pending Simple In/Out's reply. Once a client_id/secret comes back, someone still needs to do the one-time interactive authorization to obtain the initial refresh_token before this can be tested end-to-end.Endpoint paths/params verified directly against the docs' verbatim
Endpoint/Route/Parametersblocks (page text extraction, not an AI-summarized fetch) — not guessed."Settings" has no documented endpoint at all — it only appears as a timestamp key inside the
meta.last_updated_atobject on every response, not as its own resource. Not built as a tool."Favorites" is not a top-level resource — all favorites actions live under
/users/my/favorites(bulk-replace viaPOST) and/users/my/statuses/favorite//hide//unfavorite(per-item). NoGET /favoritesexists. Not built as a tool in this 15-tool scope; thePOST /users/my/favoritesbulk-replace endpoint could be added if favorites management is needed.Statuses have no update/PATCH — a status is an immutable log entry; "changing" status means creating a new one (
simpleinout_create_my_status/simpleinout_create_user_status).Scope is limited to the 15 operations above, not the full API surface (which also includes user/role/group create-update-delete, beacon/fence/network create-update-delete, and the newer Reporting API endpoint mentioned in Simple In/Out's changelog).
simpleinout_list_usershas no documented pagination parameters in the vendor docs (unlike groups/beacons/fences/networks/announcements), so nopage/page_sizeargs were added to it.
API Reference
How to request API credentials (email
help@simplymadeapps.com, subject "API")
Available Tools
15 toolssimpleinout_create_my_statusA
Create (change) the current authenticated user's status — the core check-in/check-out action.
API: POST /users/my/statuses
Args:
status: Required. One of "in", "remote", "busy", "break", "out",
"sick", "vacation".
comment: Optional comment to attach to the status change.
created_at: Optional timestamp to backdate/schedule the status change.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| comment | No | ||
| created_at | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It clearly states the mutation effect ('Create (change)') and the intended use as a check-in/check-out action. It also includes the API endpoint and argument semantics. Lacks explicit side-effect details (e.g., notifications, irreversibility), but the core behavior is well disclosed.
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 well-structured: a clear one-liner purpose, API endpoint, and bullet-like args. Every sentence earns its place; no wasted words. Scannable and informative.
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 tool's moderate complexity and absence of annotations, the description covers purpose, API, parameters, enums, and behavioral context. Output schema exists, so return values need no explanation. This is complete for an agent to select and invoke correctly.
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 0%, but the description fully compensates: it lists allowed status values, explains comment and created_at semantics including backdating/scheduling. This provides meaning far beyond the bare schema.
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: 'Create (change) the current authenticated user's status' and identifies it as 'the core check-in/check-out action.' This specific verb+resource and scope fully distinguishes it from sibling tools like create_user_status (which targets other users).
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 provides clear context by specifying 'current authenticated user' and calling it the core check-in/check-out action. It does not explicitly mention alternative tools or when-not to use, but the scope is self-evident from the name and description, meeting the 'clear context, no exclusions' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_create_user_statusA
Create (change) another user's status on their behalf. Requires the acting account to have permission to manage that user's status.
API: POST /users/:id/statuses
Args:
user_id: Required. The user's ID to change the status for.
status: Required. One of "in", "remote", "busy", "break", "out",
"sick", "vacation".
comment: Optional comment to attach to the status change.
created_at: Optional timestamp to backdate/schedule the status change.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| comment | No | ||
| user_id | Yes | ||
| created_at | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It mentions the permission requirement and that created_at can backdate/schedule the change, adding useful context. Yet it does not disclose whether the operation overwrites the existing status, triggers notifications, or has other side effects, leaving some behavioral ambiguity.
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 well-structured with an API line and a clean Args list, and every sentence adds value. The API endpoint may be technically useful but is not strictly necessary for an AI agent, making it slightly less concise than optimal.
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 tool's complexity and lack of annotations, the description covers purpose, permission, parameters, and allowed values. The presence of an output schema alleviates the need to describe return values. It does not address error scenarios or invalid input handling, but for a simple status-update tool it is reasonably 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?
The schema has zero parameter descriptions, and the description fully compensates by detailing each argument. It lists required fields, provides the exact allowed values for 'status' (in, remote, busy, break, out, sick, vacation), and explains the optional nature and purpose of 'comment' and 'created_at'.
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 tool's function: 'Create (change) another user's status on their behalf.' This distinguishes it from sibling tools like simpleinout_create_my_status, which would handle the acting user's own status. The verb 'Create' plus the resource 'status' makes the purpose unambiguous.
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 clarifies that permission is required to manage the user's status, providing a prerequisite. It implies usage for changing another user's status, which differentiates it from tools like create_my_status. However, it does not explicitly state exclusions or mention alternative tools by name, so it falls slightly short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_get_current_companyA
Retrieve the current company.
API: GET /companies/my
Args:
expand: Optional comma-separated list of related resources to embed.
| Name | Required | Description | Default |
|---|---|---|---|
| expand | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the HTTP method (GET) and API endpoint, implying a safe read operation. However, it does not mention authentication requirements, rate limits, or what happens if no company exists. The GET path adds some context but leaves significant behavioral gaps.
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 extremely concise, with the core purpose front-loaded in the first sentence. The API reference and parameter explanation are minimal and directly relevant, with no unnecessary filler.
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 single parameter, presence of an output schema, and absence of annotations, the description provides enough context for a basic retrieval tool. It clearly identifies the resource and parameter, though it could be enhanced with usage scenarios or notes on the return value beyond what the output schema presumably covers.
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 0%, so the description must explain the parameter. It does: 'Optional comma-separated list of related resources to embed' clarifies the expand parameter's purpose and format. This is a strong compensation beyond the bare schema definition.
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 'Retrieve the current company' with a specific verb and resource. This unambiguously distinguishes it from sibling tools like list_users or get_current_user, making the tool's purpose immediately apparent.
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 does not explicitly state when to use this tool versus alternatives or provide exclusions. The usage is implied by the 'current company' phrasing, but no explicit guidance or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_get_current_userA
Retrieve the current authenticated user.
API: GET /users/my
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the API endpoint, but does not mention authentication requirements, error cases, or read-only nature beyond the word 'Retrieve'. This is a safe read operation, but no explicit behavioral context is provided.
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 extremely concise—one sentence plus the API path. Every token is informative, with no fluff or repetition. It is well-structured and front-loaded.
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 zero-parameter retrieval with an output schema, the description provides the essential purpose and endpoint. However, it lacks usage guidance and behavioral disclaimers, making it only minimally complete. The output schema covers return format, but the description could mention authentication or typical use cases.
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?
There are no parameters, and the schema coverage is 100% (trivially). The description does not need to explain parameters since none exist. Baseline for zero parameters is 4.
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 verb 'Retrieve' and the resource 'the current authenticated user', distinguishing it from sibling tools like get_user or list_users. The API path 'GET /users/my' reinforces specificity, making it unambiguous.
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 given on when to use this tool versus alternatives. It does not mention scenarios like retrieving the session user's profile or contrast with get_user. The description is purely declarative, leaving usage decisions to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_get_userA
Retrieve a specific user.
API: GET /users/:id
Args:
user_id: Required. The user's ID.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the API endpoint and parameter, but does not mention potential errors (e.g., not found), authentication requirements, or any side effects. The behavior is largely opaque.
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 concise and well-structured: a one-sentence purpose, the API reference, and the argument definition. No unnecessary words, and it earns its place.
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 tool's simplicity and the presence of an output schema, the description suffices for basic usage. However, it misses the opportunity to clarify differentiation from sibling tools like get_current_user, which could cause confusion during tool selection.
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?
Although schema description coverage is 0%, the description adds meaningful semantic context for the single parameter: 'user_id: Required. The user's ID.' This clarifies the purpose of the parameter beyond the schema's bare type declaration.
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 'Retrieve a specific user' with a direct API endpoint, making the tool's purpose unambiguous. It distinguishes itself from list_users by emphasizing 'specific user' and from get_current_user by implying a user ID is provided.
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 (provide user_id to get a specific user) but does not explicitly discuss when to use this tool over alternatives like get_current_user or list_users. No exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_announcementsA
List all announcements for the company.
API: GET /announcements
Args:
page: Page number.
page_size: Results per page.
expand: Optional comma-separated list of related resources to embed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| expand | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It reveals the HTTP method GET, implying a read-only operation, and mentions pagination parameters. However, it does not clarify authentication needs, rate limits, or that 'all announcements' requires paginating through pages. The description could have provided more safety and operational context.
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 concise and follows a clear structure: a one-sentence purpose, an API line, and an Args list. There is no extraneous content, though the API line is slightly redundant given the purpose statement. It is well-organized and appropriately sized for the tool's simplicity.
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 tool's simplicity (3 optional parameters) and the existence of an output schema, the description covers the essential parameters and endpoint. However, it lacks contextual details like usage scenarios, prerequisites, or pagination iteration behavior. It is minimally viable but not fully complete for an agent unfamiliar with the company's API conventions.
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 0%, so the description must add meaning to the parameters. It provides brief explanations for each parameter: page as 'Page number', page_size as 'Results per page', and expand as 'optional comma-separated list of related resources to embed.' This adds value beyond the schema's types and defaults, especially for expand. However, page/page_size descriptions are somewhat tautological, and expand could specify which resources are embeddable.
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 all announcements for the company,' using a specific verb and resource. This clearly distinguishes the tool from sibling list tools for roles, statuses, users, etc. The phrase 'for the company' adds contextual scope, making the purpose unambiguous.
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 does not provide explicit when-to-use guidance or mention alternatives. Usage is implied by the resource name and purpose, but there are no exclusions or comparisons to other sibling list tools. It is easy to infer when to use this tool, but the description lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_beaconsA
List all beacons (Bluetooth presence beacons).
API: GET /beacons
Args:
page: Page number.
page_size: Results per page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It states 'List all beacons' and specifies 'GET /beacons', which implies a read-only operation, but it does not clarify scope (e.g., all beacons across all companies or current company), authentication, or any other behavioral details. The word 'all' is ambiguous in a multi-tenant context.
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 concise and front-loaded with the core purpose, followed by the API endpoint and argument explanations. Each section earns its place, with no unnecessary fluff or repetition of the schema.
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 description covers the essential purpose and parameters, and an output schema exists, so return values need not be explained. However, it lacks clarity on the scope of 'all beacons' and does not mention any context about filtering, sorting, or company scoping that might be relevant given the sibling tools. This leaves some ambiguity for correct invocation.
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?
The schema provides only parameter names, types, and defaults with no descriptions. The description adds 'page: Page number' and 'page_size: Results per page', giving meaningful semantics that help the agent understand pagination. It does not go deeper into default values or indexing, but it covers the basics effectively.
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 opens with 'List all beacons (Bluetooth presence beacons)' — a specific verb and resource that clearly identifies the tool's function. It also disambiguates 'beacons' as Bluetooth presence beacons, distinguishing it from other list tools for roles, fences, etc.
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 for listing beacons but gives no explicit guidance on when to choose it over sibling list tools. Sibling tools like list_fences and list_networks exist, but no alternatives or exclusions are mentioned. The usage context is clear only from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_fencesA
List all geofences.
API: GET /fences
Args:
page: Page number.
page_size: Results per page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It provides the API endpoint (GET /fences) and pagination parameters, but does not mention any scoping (e.g., current company) or authentication requirements. This leaves some ambiguity about the tool's full behavior.
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 extremely concise, with the main purpose front-loaded and no unnecessary words. It efficiently conveys the API and args in a clear structure.
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 and has an output schema, so return values are covered. The description covers purpose and parameters, but lacks contextual details such as scoping rules or preconditions, which could be important for correct usage.
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?
The description adds brief semantic meaning for both parameters ('Page number' and 'Results per page') which is not present in the schema beyond titles. Since schema coverage is 0%, this compensation is helpful but minimal for a simple two-parameter tool.
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 geofences' with a specific verb and resource. It distinguishes itself from sibling list tools by naming 'geofences' and emphasizing 'all', which implies a comprehensive listing without filters.
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 by stating the purpose, but it does not explicitly mention when to use this tool versus alternatives or provide exclusions. Given the sibling tools are for different resources, the implied usage is clear, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_groupsA
List all groups.
API: GET /groups
Args:
page: Page number.
page_size: Results per page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses the API method (GET) and parameters, implying a read-only operation, but it does not explicitly mention pagination behavior or any side effects. This adds some context but lacks depth.
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 extremely concise with a clear structure: action, API endpoint, and args. Every line serves a purpose, and there is no unnecessary redundancy.
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 paginated list tool with an output schema, the description covers the key aspects: action, API endpoint, and parameter semantics. It lacks notes on pagination specifics or error handling, but is reasonably complete for its simplicity.
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?
The description provides brief descriptions for both parameters ('Page number' and 'Results per page'), which adds meaning beyond the schema titles. However, it lacks details like default behavior, constraints, or indexing (e.g., 1-based vs 0-based).
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 groups', identifying the verb 'list' and resource 'groups'. It doesn't explicitly distinguish from sibling tools, but the resource is unique among the siblings, making the purpose unambiguous.
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 when-to-use or alternative tool guidance is provided. The usage is implied by the tool name and description (i.e., when you need to list groups), but there are no exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_my_statusesA
List the current authenticated user's status history within a date range.
API: GET /users/my/statuses
Args:
created_at: Required. Date/time range filter, e.g. "1523854800..1524459599".
| Name | Required | Description | Default |
|---|---|---|---|
| created_at | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adds value by specifying the API endpoint (GET /users/my/statuses) and the required date-range filter, implying a read-only operation. It does not disclose pagination, ordering, or error behavior, but for a simple list tool with an output schema, this is acceptable context.
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 compact and focused, with no wasted words. Each line serves a purpose: stating the action, providing the API endpoint, and explaining the required parameter.
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 tool's simplicity (one required parameter) and the presence of an output schema, the description covers all essential aspects: purpose, parameter format, and API reference. It does not discuss alternatives or edge cases, but these are not critical for a straightforward list operation.
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?
The schema only defines created_at as a string with no additional meaning. The description fully compensates by explaining it is a date/time range filter and providing an explicit format example ('1523854800..1524459599'), making the parameter semantics clear.
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'), the resource ('status history'), and the scope ('current authenticated user'), distinguishing it from sibling tools like list_statuses or list_user_statuses. The verb+resource structure is explicit and unambiguous.
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 clearly indicates this tool is for the current authenticated user's status history within a date range, providing clear context for when to use it. However, it does not explicitly exclude alternatives or mention cases where sibling tools like list_user_statuses should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_networksA
List all Wi-Fi networks used for automatic presence detection.
API: GET /networks
Args:
page: Page number.
page_size: Results per page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states the action 'List' and the HTTP method, which implies read-only, but does not disclose pagination behavior, permissions, rate limits, or any other side effects. The description is minimal and does not add meaningful behavioral context beyond the obvious.
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 concise and well-structured, with a clear purpose statement, the API endpoint, and a simple args list. It contains no unnecessary words or repetition, earning a high score for efficiency.
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 two optional parameters and an output schema, the description covers the essential aspects: what it lists, the endpoint, and the parameters. It does not include additional context like filters or business rules, but the tool's simplicity makes it reasonably 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?
The description provides brief meanings for the two parameters ('page: Page number', 'page_size: Results per page'), which adds a little value over the schema titles 'Page' and 'Page Size'. However, schema coverage is 0% and the explanations are minimal, not compensating enough for the lack of detailed schema descriptions.
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 tool's function with a specific verb and resource: 'List all Wi-Fi networks used for automatic presence detection.' It also provides the API endpoint (GET /networks) and distinguishes itself from sibling list tools that target roles, statuses, users, etc.
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 gives clear context for when to use this tool: when you need to list Wi-Fi networks for presence detection. The sibling tool names are distinct, so the intended use is evident. However, it does not explicitly mention alternatives or exclusionary conditions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_rolesA
List all roles defined in the company (needed to create a user, which requires a role_id).
API: GET /roles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses the API method (GET /roles), which implies a read-only, safe operation. It also specifies 'all roles', giving a sense of scope. No rate limits or pagination are mentioned, but the simplicity of the tool lowers the burden.
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 two sentences, with the primary purpose first and the API endpoint second. Every word adds value, and there is no redundancy or filler.
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 tool's simplicity (0 params, output schema present), the description adequately explains what it does, why it matters (role_id for user creation), and the HTTP endpoint. No further context is needed.
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?
There are zero parameters, so the schema already fully covers the input space. The description adds no parameter details because none exist, which is appropriate; the baseline for 0 params is 4.
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 all roles defined in the company') with a specific verb and resource. It also distinguishes from sibling tools by noting the relationship to creating a user, which requires a role_id.
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?
It provides clear usage context by stating that roles are needed to create a user, implying when this tool would be invoked. It does not explicitly exclude alternatives, but for a simple list tool this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_statusesA
List status-change history across the whole company within a date range.
API: GET /statuses
Args:
created_at: Required. Date/time range filter, e.g. "1523854800..1524459599"
(epoch seconds, `..` between two values for a range).
| Name | Required | Description | Default |
|---|---|---|---|
| created_at | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It discloses the HTTP method (GET) and parameter format, but does not mention any behavioral traits such as auth requirements, pagination, rate limits, or response details. The read-only nature is implied by 'List' but not explicitly stated.
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 succinct and well-structured. The main purpose is front-loaded, the API endpoint is provided in a single line, and the parameter explanation is clear without unnecessary fluff. Every sentence adds value.
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 one-parameter tool with an output schema, the description covers the essential aspects: purpose, parameter meaning, and endpoint. It does not explain pagination or potential limitations, but given the simplicity and output schema availability, it is nearly 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 0%, but the description thoroughly explains the only parameter 'created_at': it is required, acts as a date/time range filter, includes a concrete example, and specifies the epoch seconds format with '..' separator. This fully compensates for the schema's lack of description.
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 tool's function: 'List status-change history across the whole company within a date range.' This uses a specific verb and resource, and explicitly scopes it to the whole company, distinguishing it from sibling tools like simpleinout_list_my_statuses and simpleinout_list_user_statuses.
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 for company-wide status history within a date range, but it does not explicitly mention when to use this tool versus alternatives. It provides context (whole company) but no direct exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_usersA
List all users in the company.
API: GET /users
Args:
name: Filter by name.
email: Filter by email address.
group_id: Filter by group ID.
status: Filter by current status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| No | |||
| status | No | ||
| group_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the HTTP method 'GET', which implies read-only behavior, and lists filter parameters. However, it does not mention pagination, ordering, authentication needs, or response size, leaving some behavioral aspects untold.
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 concise and well-structured: a one-sentence summary, the API endpoint, and a clean list of parameters with one-line explanations. Every element earns its place without unnecessary verbosity.
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 straightforward list tool with four optional filters, the description covers the essential purpose and parameters. An output schema exists, so return values are already documented. Minor gaps like pagination or ordering are not addressed, but overall the description is sufficient for a simple list operation.
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 0%, but the description compensates by explaining each parameter's purpose (e.g., 'name: Filter by name'). This adds clear meaning beyond the raw schema types and defaults, though it doesn't provide details on matching behavior or allowed values.
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 users in the company' with a specific verb and resource, and it maps to the GET /users endpoint. It distinguishes itself from sibling tools like list_roles and list_groups by focusing on users.
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 when you need to list users and optionally filter them, but it does not explicitly state when to use this tool versus alternatives like get_user or list_user_statuses. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simpleinout_list_user_statusesA
List a specific user's status history within a date range.
API: GET /users/:id/statuses
Args:
user_id: Required. The user's ID.
created_at: Required. Date/time range filter, e.g. "1523854800..1524459599".
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| created_at | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly discloses the read operation and the API endpoint, and notes required inputs. However, it does not mention pagination, ordering, permissions, or potential errors. With an output schema present, the description adds moderate value.
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 concise and well-structured, using a summary line, the API endpoint, and a clean args list. Every element earns its place, and there is no redundant or filler content.
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 two-parameter tool with an output schema, the description is nearly complete. It gives the purpose, endpoint, and parameter details. It lacks minor context like authentication or pagination, but these are not critical for this simple list operation. The output schema reduces the need to describe return values.
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 0% (no descriptions in the schema properties). The description compensates by fully explaining both parameters: user_id is 'The user's ID' and created_at is a 'Date/time range filter' with an example format. This is essential and adds significant meaning beyond the bare schema.
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'), the resource ('specific user's status history'), and the scope ('within a date range'). It distinguishes this tool from siblings like list_statuses and list_my_statuses by emphasizing 'specific user' and date range.
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 when to use this tool: when you need a specific user's status history within a date range. It does not explicitly mention alternatives but the wording effectively differentiates it from sibling tools. Context is clear, but explicit exclusionary guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v0.1.0- First observed
simpleinout_create_my_status - First observed
simpleinout_create_user_status - First observed
simpleinout_get_current_company - First observed
simpleinout_get_current_user - First observed
simpleinout_get_user - First observed
simpleinout_list_announcements - First observed
simpleinout_list_beacons - First observed
simpleinout_list_fences - First observed
simpleinout_list_groups - First observed
simpleinout_list_my_statuses - First observed
simpleinout_list_networks - First observed
simpleinout_list_roles - First observed
simpleinout_list_statuses - First observed
simpleinout_list_user_statuses - First observed
simpleinout_list_users
TDQS
Most tools target distinct resources (roles, users, groups, announcements, beacons, etc.), and the three status-listing tools are differentiated by scope (company, self, specific user). The only potential confusion is between list_my_statuses and list_user_statuses, but descriptions clearly indicate self vs. other.
All tools follow a consistent `simpleinout_` prefix with a clear verb_noun pattern (list_*, get_*, create_*). No mixed conventions or ambiguous verbs; the naming is uniform and predictable.
15 tools is within a reasonable range for a presence/status management server. A few list-only tools (beacons, fences, networks) feel slightly peripheral, but they align with the presence detection domain and do not make the set unwieldy.
The core workflow of checking in/out is covered via create_my_status and create_user_status, and status history is queryable. However, there are notable gaps: no create/update/delete for users, roles, groups, announcements, or configuration entities like beacons/fences/networks, limiting full lifecycle management.
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
The official Planning Center MCP server for interacting with your ministry's data.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
A basic MCP server to operate on the Postman API.
MCP server providing attendance data queries via the CloudTime API.
Related MCP Servers
- AlicenseDqualityDmaintenanceMCP server for managing Pterodactyl game panel resources (users, servers, nodes, locations, etc.) via the Application API.503MIT
- FlicenseAqualityDmaintenanceA simple MCP server that provides greeting tools and server information.1-
- AlicenseAqualityCmaintenanceMCP server for the Snipe-IT asset management REST API, enabling read and write operations on assets, licenses, accessories, and more.13Apache 2.0
- AlicenseAqualityAmaintenanceMCP server for SimpliSafe home security. Enables checking system status, sensors, events, arming/disarming, and controlling smart locks.10218MIT
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/MSPbotsAI/simpleinout-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server