Open-source desktop AI utility with plugin architecture. Plugins are MCP servers that communicate via JSON-RPC 2.0 over stdio. Includes GitHub Issues and Slack Webhook plugins.
This MCP server has three tools with partially visible definitions. The schema for create_github_issue and send_to_slack are present and reasonably structured, but my_tool is a template placeholder. Descriptions exist but are generic and lack the depth needed for LLM decision-making. Parameter descriptions are minimal or absent. No documented output schemas. Error handling is present in the code but not documented in tool definitions. The tools follow basic naming conventions (verb-noun) but descriptions are too brief to guide LLM selection effectively.
Tools (3)
create_github_issuewriteauthsource verified63/100
Create a GitHub issue from snipped text. The title and body are generated from the screen capture.
my_toolread onlysource verified20/100
Describe what your tool does clearly — the LLM reads this to decide when to offer it to the user.
send_to_slackwriteauthsource verified58/100
Send snipped content to a Slack channel via incoming webhook. The text is summarized by the LLM before sending.
Parameter descriptions are missing or one-liner. E.g., 'repo' says 'Repository in owner/repo format (optional, uses config default)' but does not explain what happens when omitted or how the LLM should decide whether to provide it.
No output schema documented for any tool. LLMs cannot plan downstream calls or extract returned data without knowing what fields to expect (e.g., does create_github_issue return issue_url, issue_id, or both?).
create_github_issuesend_to_slackmy_tool
Recommendations
Remove or replace my_tool with a real, production tool. If it is a template, move it outside the plugin registry or add a 'skip' flag in plugin config.
Expand create_github_issue description to 150-200 chars: 'Create a GitHub issue in a specified repository. Provide title (required, 1 - 256 chars) and body (required, GitHub Markdown). Optionally specify repo (owner/repo format; defaults to config) and labels (comma-separated; validated against repo labels). Returns issue URL and ID. Requires GITHUB_TOKEN environment variable with repo write scope.'
Add output schema to create_github_issue: { type: 'object', properties: { issue_url: { type: 'string', description: 'Web URL to the created issue' }, issue_id: { type: 'integer', description: 'GitHub issue number' }, issue_number: { type: 'integer', description: 'Issue number in the repo' } }, required: ['issue_url', 'issue_id'] }
Document repo parameter: 'Repository in owner/repo format (e.g., torvalds/linux). If omitted, uses default_repo from ~/.config/omni-glass/plugin-config/com.omni-glass.github-issues.json. If neither provided, returns an error with guidance to set default or pass repo explicitly.'
Document labels parameter: 'Comma-separated GitHub issue labels (e.g., bug,urgent). Spaces around commas are trimmed. Invalid labels are silently ignored (GitHub API behavior). Recommend calling list_repo_labels first to discover valid names, or leave empty if unsure.'
Expand send_to_slack description: 'Send a message to a Slack workspace via an incoming webhook. Provide text (required, up to 4000 chars; supports Slack markdown). Optionally specify channel (e.g., #general or @user_id); if omitted, uses webhook default. LLM summarization happens before sending. Returns message timestamp and channel. Requires SLACK_WEBHOOK_URL environment variable configured for the target workspace.'
No error handling guidance in tool definitions. Code has try/catch, but error responses are not documented. Per pattern:recovery-guide, error responses must tell the LLM what to do next (e.g., 'GitHub token invalid. Set GITHUB_TOKEN environment variable and retry.').
Labels parameter in create_github_issue is a free-form comma-separated string. No enum or validation guidance. LLM may pass invalid GitHub label names, wasting a call.
Channel parameter in send_to_slack is optional with no default behavior documented. Does the tool fall back to a webhook default? Does it error? LLM cannot reason about this.
GITHUB_TOKEN and Slack webhook URL are loaded from environment, but this dependency is not declared in tool descriptions. Per pattern:secret-injection, credential requirements must be explicit so agents know upfront what is needed.
create_github_issuesend_to_slack
Document send_to_slack channel parameter: 'Target Slack channel or user (optional, e.g., #alerts, @alice, or C123456789 for channel ID). If omitted, message posts to the webhook's default channel. Invalid channels return a clear error with guidance to verify the channel exists and the webhook has permission.'
Add error handling examples to each tool description: 'On error (auth, invalid repo, network timeout), returns error: { code: 'GitHub:Unauthorized', message: 'GITHUB_TOKEN invalid or missing. Set GITHUB_TOKEN env var and retry.' }'
Add permission hints to descriptions: 'create_github_issue requires GITHUB_TOKEN with repo write scope (repo full access) or write:issues scope if using fine-grained tokens. send_to_slack requires SLACK_WEBHOOK_URL pointing to a workspace with post permission.'
Create a discovery tool list_repo_labels(repo: string) → { labels: [{ name: string, color: string, description: string }] } so LLMs can fetch valid labels before calling create_github_issue, avoiding invalid label errors.