MCP server for semantic querying of clipboard history using vector embeddings and cosine similarity matching, with sensitive data redaction
This MCP server has critical structural and definitional gaps. The tool 'execute_skill_action' is defined with minimal metadata. The server code (mcp_server.py) only prints a JSON initialization message and does not implement the MCP protocol handshake, request/response handling, or tool invocation logic. The tool definition appears in the source but is inferred rather than explicitly registered via proper MCP initialization. Parameter descriptions exist but are superficial (semantic_query: 'Natural language semantic search query...', max_results: 'Maximum number of matching...'), these lack specificity about format, constraints, or error conditions. No input schema validation is visible. No output schema is documented anywhere, the client.py mock shows a return structure, but this is not formally exposed to MCP clients. Error handling is absent. The tool name 'execute_skill_action' violates verb_noun clarity, it is vague about what semantic action occurs. No pagination support despite the tool returning indexed items. Risk field is marked READ_ONLY but the tool is labeled as operating on 'clipboard history,' implying access to potentially sensitive data (evidenced by the 'sensitive_secret_redacted_view' in the mock output), yet no security or permission validation is documented.
Execute a semantic clipboard history query action with vector buffer matching
Tool name 'execute_skill_action' is vague and generic. Does not start with a clear action verb that describes the operation. 'execute_skill_action' could mean almost anything; 'query_semantic_clipboard' or 'search_clipboard_history' would be clearer.
No MCP protocol implementation visible in mcp_server.py. The server only prints a static JSON message and does not implement request/response handling, tool invocation dispatch, or proper protocol handshakes. This is not a functional MCP server.
Parameter 'max_results' has no type constraints (min/max bounds, default value). An unbounded integer invites LLMs to pass absurd values (0, -1, 1000000), potentially breaking the semantic search or exhausting resources.
No output schema documented. The tool description does not specify what fields or structure the response contains. LLMs cannot plan downstream operations without knowing the return type.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 26 | 2026-07-28+ | v2 |
Tool operates on clipboard history containing potentially sensitive data (bearer tokens, connection strings, passwords evidenced by 'sensitive_secret_redacted_view'). No permission checks, audit logging, or scope declarations visible. Security pattern violations.
Parameter descriptions are too brief (under 50 chars). 'Natural language semantic search query against clipboard history' lacks actionable constraints. Does it accept freeform text? Are there length limits? Regex patterns? Required format?
No error handling or recovery guidance. Tool returns mock data with no error cases shown. What happens if the semantic query is malformed? If max_results exceeds limits? If the clipboard buffer is empty? LLM has no guidance on next steps.
Client code shows mock responses referencing external URLs ('https://clipboard.genpark.ai/buffers/8812.json'). No actual implementation or backend logic shown. Tool definition is inferred, not explicitly registered.