Delx Living Body
Server Quality Checklist
Latest release: v0.3.7
- Disambiguation2/5
Three tools—connection_status, status, and health_check—all report connector availability and can be easily confused. Similarly, agent_manifest, data_inventory, and capabilities all serve self-description/onboarding purposes, making the tool boundaries unclear.
Naming Consistency3/5All tools share the living_body_ prefix and snake_case, which is helpful, but the pattern is mostly noun phrases with occasional verb forms like ask and compose_context. The naming is readable but not a consistent verb_noun convention.
Tool Count4/5Nine tools is within the ideal range, but several status and metadata tools overlap significantly, making the set feel slightly padded. The count is not excessive overall.
Completeness4/5The core workflows—discovering connectors, checking health, asking wellness questions, and composing context—are covered. Minor gaps like direct per-connector data access or configuration tools exist, but agents can likely work around them.
Average 3.7/5 across 9 of 9 tools scored.
See the Tool Scores section below for per-tool breakdowns.
- No community issues in the last 6 months
- 27 commits in the last 12 weeks
- Last stable release on
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI is passing
This repository is licensed under MIT License.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
This repository includes a glama.json configuration file.
This server has been verified by its author.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool spawns child MCP processes and requires explicit user intent, which is useful behavioral context beyond the readOnly/openWorld annotations. It does not contradict the annotations, and the safety profile is already covered by readOnlyHint=true and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The core purpose is front-loaded, and the process/safety caveat about spawning child processes and requiring explicit intent is placed immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness2/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape is covered. However, for a tool that spawns subprocesses and has four parameters with only 25% schema coverage, the description leaves out important context: default sources, behavior across privacy modes, how child processes are handled, and when to use this instead of related tools. It is minimally viable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters2/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description must compensate for the undocumented sources, privacy_mode, and response_format parameters. The phrase 'each detected connector' gives some hint about sources, but the description does not explain how sources are selected, what privacy_mode levels mean, or how response_format affects the output. This is a significant gap given the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool produces a synthetic daily briefing by aggregating each detected connector's daily summary/context. This identifies the action (aggregate/synthesize) and the resource (daily briefings from health connectors), though it does not explicitly contrast itself with sibling tools like living_body_ask or living_body_compose_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an important precondition: it spawns child MCP processes and requires explicit_user_intent: true. This implies the caller must have explicit user intent and should not call it speculatively, but it does not clearly state when to choose this tool over alternatives such as living_body_ask or living_body_compose_context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds useful context about the per-connector availability matrix, but does not disclose other behavioral details such as output size, latency, or whether the availability data is cached or dynamically computed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the core purpose and immediately adds the most relevant distinguishing detail, the per-connector availability matrix.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness3/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity introspection tool with strong annotations and a response_format schema, and an output schema exists. The description is adequate for basic invocation, but it leaves the reader without explicit guidance on when to prefer this over sibling status/health tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the sole parameter response_format. However, the schema itself supplies an enum of 'markdown' and 'json' plus a default, making the parameter largely self-explanatory, so the lack of parameter description is not a major usability gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a self-description of the MCP and specifies the key content of a 'per-connector availability matrix'. It is distinguishable from most siblings because it focuses on capabilities rather than status, health, or data inventory, though it does not explicitly name or contrast siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Self-description of this MCP' implies the tool should be used when an agent needs to discover what the MCP can do and which connectors are available. However, it provides no explicit guidance about when not to use it or how it differs from sibling tools like living_body_status or living_body_health_check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, non-destructive behavior. The description adds context that this tool does not call vendor APIs or child data tools, which is a behavioral trait beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's purpose and key constraint. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness3/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and absence of output schema, the description adequately covers the core functionality. However, it omits the response format parameter and does not explain return format, which would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters2/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. However, it does not mention the single parameter 'response_format' or its allowed values, leaving the agent to infer it from the schema alone. The description adds no semantic value for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a ready/not-ready snapshot of local connector detection, avoiding vendor APIs or child data tools. It is specific about the resource and action, but does not explicitly differentiate from siblings like 'living_body_status' or 'living_body_health_check'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for quick status checks without external calls, but does not provide explicit guidance on when to use this tool versus alternatives. No when-not 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.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds the key behavioral detail 'no subprocess spawning', which reassures safety 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.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the purpose, no wasted words. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness3/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description covers the core purpose but omits any mention of the parameter or output, leaving the agent to rely solely on the schema. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters2/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it does not mention the single parameter 'response_format'. The parameter is simple with an enum, but the description adds no value for parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Detect' and the resource 'which Delx Wellness connectors are installed locally'. This distinguishes it from siblings like living_body_capabilities or living_body_health_check, which likely address other aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines2/5Does 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. The note 'Safe, no subprocess spawning' implies safety but does not contextualize usage relative to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces these with 'Static inventory' and 'No live child calls', adding modest context about non-live behavior. It does not contradict annotations and adds some value, but the annotations carry most of 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.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads key information (static inventory, contents) and ends with a clear no-live-calls qualifier. No extraneous words or redundant structures.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a static inventory tool with one optional parameter and rich annotations, the description adequately covers the tool's purpose and behavior. It lists included contents but does not specify the output structure or how the response_format parameter varies the response. This is a minor gap given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters2/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the response_format parameter. Although the parameter is simple and self-explanatory via its enum values, the description fails to explain its impact on output. Given the low coverage, the description should have compensated but did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a 'static inventory' listing specific items (domains, connectors, privacy modes, recommended first calls) and explicitly distinguishes it from tools that make live calls. The verb 'inventory' combined with the contents list provides a precise, actionable purpose that differentiates from siblings like living_body_connection_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving static configuration data and warns against expecting live calls, but does not provide explicit when-to-use or when-not-to-use guidance, nor does it reference alternative sibling tools. The context from sibling names is available but not leveraged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond those annotations: it explicitly says missing connectors are reported rather than silently skipped, and that install hints are included in the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core action, the full scope, the treatment of missing connectors, and the presence of install hints. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness3/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover return values and safety, and the single optional parameter is self-explanatory. However, with eight sibling tools including other status-related tools, the description lacks guidance on when this health check should be selected over them, so the overall context is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, response_format, is fully constrained by the schema's enum and default, so the agent does not need additional description to use it correctly. The description adds no parameter-level meaning, but the schema provides enough semantics on its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns status for every known connector, including missing ones, and includes install hints. This clearly differentiates it from sibling tools like living_body_connection_status and living_body_status by emphasizing the comprehensive, all-connector scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines2/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to use this tool versus the sibling status/connection tools. The phrase 'including missing ones — with install hints' implies a diagnostic use case, but the description does not state conditions, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is safe and non-destructive. The description adds that it returns 'install and operating instructions,' which is useful context but not essential beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise—two sentences with no fluff. It is front-loaded with the core purpose. However, it could be slightly expanded to cover parameter hints without losing concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no required params, no output schema, rich annotations), the description is largely complete. It explains what the tool is and when to use it. The only minor gap is parameter semantics, but overall it covers the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters2/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning parameter properties lack descriptions. The description does not elaborate on the parameters (client, response_format). While the enum values are somewhat self-explanatory, the description fails to add meaning for an agent to choose appropriate values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: 'Machine-readable install and operating instructions for AI agents' with a specific usage directive 'Call first when onboarding.' This distinguishes it from sibling tools like status, health_check, and capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call first when onboarding,' providing clear when-to-use guidance. It does not explicitly state when not to use or name alternatives, but given the sibling tool list, the usage context is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and destructiveHint already provided by annotations, the description adds meaningful behavioral context: it says the tool spawns child MCP processes, which implies real execution cost and process orchestration. It also surfaces the explicit-user-intent precondition. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose and uses an em dash for the operational caution. There is no filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return shape, annotations cover safety, and the description covers scope, side-effect, and prerequisite, which is enough for basic invocation. The main gap is optional-parameter meaning, particularly privacy_mode and whether sources limits or expands the detected-source set, but these are not required for a default call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters2/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%, so the description must compensate for undocumented parameters. It indirectly clarifies sources by saying 'across all detected sources' and repeats explicit_user_intent, but privacy_mode, response_format, and sources array behavior are not meaningfully explained. This leaves most optional parameters underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose4/5Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete operation and output contract: it returns the normalized delx-wellness-context/v1 shape merged across all detected sources. This is specific and actionable. It does not explicitly differentiate from siblings like living_body_ask or living_body_daily_brief, but the compose-context purpose is still clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the key invocation condition: requires explicit_user_intent: true, and the schema adds that agents must not call speculatively because it spawns child MCP processes. This gives clear when-to-use context. It does not name alternatives or exclusion cases, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior5/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals that the tool composes connectors in parallel, spawns subprocesses, and returns both a synthesized answer and a reasoning trace. These are meaningful behavioral traits an agent would not infer from readOnlyHint/openWorldHint alone. There is no contradiction with 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.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, roughly 25 words, with the primary verb and resource up front and the critical caveat at the end. Every clause contributes to agent understanding, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior, parallel composition, subprocess side effect, and the intent gate. Since an output schema exists, return values are already specified elsewhere. It does not mention optional parameter defaults like sources defaulting to all detected connectors, but those are documented in the schema, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80% and each parameter already has its own descriptive text, so the schema carries most of the semantic load. The tool description reinforces that `question` is a natural-language query and `explicit_user_intent` is mandatory, but it does not add new information about sources, privacy_mode, or response_format beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair ('Ask a wellness question') and describes the core mechanism: composing detected connectors in parallel and returning a synthesized answer plus reasoning trace. This clearly distinguishes it from sibling tools like status, capabilities, or data inventory, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly identifies the use case (a wellness question) and the critical precondition that the caller must have explicit user intent ('Spawns subprocesses — requires explicit_user_intent'). It does not explicitly name alternatives or exclusions, but the intent requirement and question-oriented purpose provide strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
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/davidmosiah/delx-living-body'
If you have feedback or need assistance with the MCP directory API, please join our Discord server