kansei-mcp-server
Server Details
Reduce your AI agent's token waste with collective intelligence — SaaS integration recipes
- Status
- Healthy
- Uptime
- 95.5% over 76 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- kansei-link/kansei-mcp-server
- GitHub Stars
- 1
- Server Listing
- KanseiLink MCP Server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
The three tools have mostly distinct roles: search_services discovers services, lookup retrieves service-specific guidance, and report records outcomes or notes. There is slight overlap because search_services and lookup both return service information, and lookup's notes mode versus report's note mode could be confused if the read/write distinction is missed.
The names are all lowercase and readable, but they mix conventions: search_services is verb_noun while lookup and report are bare verbs/nouns. The pattern is not predictable enough for a top score, though it does not impede understanding.
Three tools map directly to the advertised workflow: search_services → lookup → report. Each tool has a clear place, and the small set is appropriate for a focused knowledge/feedback server rather than being thin.
The surface covers discovery, detailed lookup, reading notes/fixes, and reporting outcomes or notes, forming a complete core loop. Minor gaps remain: there is no explicit execute/integration-test tool in this server and no update/delete operations for contributed notes or reports.
Available Tools
3 toolslookupLookupAInspect
Get everything you need about a service before using it. Default: tips (auth setup, pitfalls, workarounds). Use mode: 'notes', service_id and optional q to read reusable, unverified field notes without publishing anything. Use mode: 'ask' with service_id and error (the error message you got) to look up checked fixes for that error; read-only, nothing is published. Add detail: true for full connection guide, insights: true for usage data. Pass goal: 'workflow description' to find multi-service recipes. This is step 2 of the standard KanseiLink flow: search_services → lookup → (execute) → report. Except notes mode, each call records one attempt handle (attempt_id) and clears attempt handles older than 90 days.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | [notes] Symptom or task keywords; omit to see recent notes for this service. | |
| goal | No | Workflow goal — triggers recipe mode (e.g., 'onboard employee') | |
| mode | No | Explicit mode override | |
| error | No | [ask] The error message you received (secrets are masked before anything is stored; send the message, not the whole trace). | |
| detail | No | Get full connection guide (auth, endpoints, rate limits) | |
| period | No | Time period — triggers history mode | |
| runtime | No | [ask] Your runtime family (claude/codex/gpt/gemini/other). | |
| service | No | Fuzzy service name — triggers combinations mode | |
| insights | No | Get aggregated usage data (success rate, trends, errors) | |
| services | No | Your available service IDs — for recipe coverage calculation | |
| note_scope | No | [notes] Defaults to field. verification isolates internal release checks from ordinary discovery; not a privacy boundary. | |
| service_id | No | Service ID (from search_services) | |
| compare_with | No | Competitor service_id for comparison — triggers history mode | |
| feedback_type | No | [feedback] Filter by feedback type | |
| feedback_limit | No | [feedback] Max results (default 20) | |
| feedback_status | No | [feedback] Filter by status. Triggers feedback mode when present. | |
| voice_agent_type | No | [voices] Filter by agent type (claude, gpt, gemini) | |
| voice_question_filter | No | [voices] Filter by question_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavior beyond annotations: each non-notes call records an attempt_id handle and clears handles older than 90 days, and secrets are masked before storage. This actually explains why readOnlyHint=false despite the tool reading data, which is valuable. It stops short of describing rate limits, latency, or failure modes for the mutation side.
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?
Front-loads the purpose, then mode guidance, then the flow context, all in one dense paragraph. Efficient overall, though 'nothing is published' is stated twice and the paragraph is long enough to be harder to scan than a short bulleted mode list would be.
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 an 18-parameter tool with no output schema, the description covers the primary flows, attempt-handle lifecycle, and secret handling well. Gaps remain: it never describes what the default tips call returns, and four modes (combinations, history, feedback, voices) are only discoverable through schema param descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the default mode (tips) that the schema does not state and clarifies mode/parameter interplay (which param triggers which mode). It does not, however, explain the modes only reachable via schema (combinations, history, feedback, voices), so it is an incremental rather than complete complement.
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?
Opens with a specific verb+resource (get everything about a service before using it) and immediately situates the tool in the flow 'search_services → lookup → (execute) → report', explicitly naming both siblings. An agent can distinguish lookup from search_services and report without opening any schema.
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?
Gives explicit when-to-use routing: default tips mode, notes mode with service_id/q, ask mode with service_id/error, plus detail:true, insights:true, and goal for recipe mode. It also states the exclusions ('without publishing anything', 'nothing is published') and the overall flow position, so mode selection is largely prescribed rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reportReportAInspect
Record outcomes, feedback, events or experience in this installation. Use mode 'note' with note to contribute a reusable summary; mode 'note_result' with note_result to report trying an existing note. These two modes require share:true: the summary is readable by others with access to this server (public on the hosted server). A local stdio installation does not upload it. Share only with user authorization; omit secrets and personal information. Other report modes retain their existing local storage and separate sharing consent behavior. For outcome mode, provider_request_id makes the record traceable in the provider's own logs.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | [feedback] Your feedback in detail. Write freely. | |
| mode | No | Explicit mode selection. Auto-detected from params if omitted: success → outcome, question_id → voice, event_type → event, subject+body → feedback. | |
| note | No | [note] Authorized summary to share in this server's field-note store. Use a fresh session UUID per execution and stable request UUID for retries. Optional read_note_ids: up to 5 ids of existing notes you read before solving. service_id may also be a tool id (git, powershell, node, npm, python, docker, curl, windows). | |
| title | No | [event] Short event title (e.g., 'freee API v3 deprecation'). | |
| context | No | [outcome] Additional context about the usage (PII will be auto-masked). | |
| note_id | No | [outcome] Field-note ID this report belongs to (format AWT-000). Stored as null if the format does not match. | |
| subject | No | [feedback] Short summary of your feedback (1 line). | |
| success | No | [outcome] Whether the operation succeeded. | |
| agent_id | No | Your agent identifier (optional, for follow-up). Used in feedback and voice modes. | |
| cost_usd | No | [outcome] Actual cost in USD (estimated from tokens if omitted). | |
| is_retry | No | [outcome] Whether this is a retry of a previously failed call. | |
| priority | No | [feedback] How important: low, normal, high, critical. Default: normal. | |
| recipe_id | No | [outcome] Recipe used for this attempt. | |
| task_type | No | [outcome] Operation performed (e.g., 'create_invoice', 'search_contacts'). | |
| agent_type | No | Agent platform type (claude, gpt, gemini, copilot, llama, deepseek, other). Used in outcome mode (auto-inferred from model_name if omitted) and voice mode. | |
| attempt_id | No | [outcome] attempt_id returned by lookup. | |
| confidence | No | [voice] How confident are you in this assessment? high, medium, low. | |
| error_type | No | [outcome] Error category if failed (e.g., 'auth_error', 'timeout', 'rate_limit', 'schema_mismatch'). | |
| event_date | No | [event] When the event occurred or takes effect (YYYY-MM-DD). | |
| event_type | No | [event] Category: api_change, api_deprecation, law_amendment, pricing_change, outage, security_incident, feature_launch, competitor_move, mcp_update, other. | |
| latency_ms | No | [outcome] Response time in milliseconds. | |
| model_name | No | [outcome] LLM model used (e.g., 'claude-sonnet-4', 'gpt-4o'). | |
| service_id | No | Service ID. Required for outcome and voice modes. Optional for feedback and event. | |
| session_id | No | [outcome] Optional. A UUID you generate once and reuse for every report during one task, so reports from the same task count as one agent (only a salted hash is stored, never this value). Anything that is not a UUID is ignored. | |
| workaround | No | [outcome] How you resolved the issue, if any. Helps future agents. | |
| description | No | [event] Details about the event and expected impact. | |
| failed_step | No | [outcome] Step identifier where execution stopped. | |
| note_result | No | [note_result] Actual result of trying a note. Includes note_id, service_id, outcome, conditions and evidence. | |
| question_id | No | [voice] Which question to answer: selection_criteria, would_recommend, biggest_frustration, best_feature, switching_likelihood, auth_experience, doc_quality, error_handling, compared_to_competitor, mcp_readiness, free_voice. | |
| input_tokens | No | [outcome] Input/prompt token count. | |
| feedback_type | No | [feedback] Type of feedback: suggestion, missing_data, correction, feature_request, workaround_tip, bug_report, praise, other. | |
| output_tokens | No | [outcome] Output/completion token count. | |
| response_text | No | [voice] Your honest answer in your own words. | |
| recipe_version | No | [outcome] Recipe version returned by lookup. | |
| estimated_users | No | [outcome] Approximate number of end-users your agent serves. | |
| impact_expected | No | [event] Expected impact: positive, negative, neutral, unknown. | |
| response_choice | No | [voice] Quick rating where applicable (e.g., 'strongly_yes', 'excellent', 'ready'). | |
| provider_error_code | No | [outcome] Provider's error code string (e.g. expired_access_token) or an RFC 9457 problem type URI (https://…, max 200 chars). Stored as null if the format does not match. | |
| provider_request_id | No | [outcome] Request or error ID the provider returned (e.g. from an x-request-id header). If present and well-formed, the record becomes traceable in the provider's own logs. Stored as null if the format does not match. | |
| provider_request_id_source | No | [outcome] Where the provider request ID came from: 'header:<name>' (e.g. header:x-request-id) or 'body:<field>' (e.g. body:id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing that note modes require share:true and become readable by others, possibly public on the hosted server, while a local stdio installation does not upload it. It also covers consent requirements, secret/PII omission, separate sharing behavior for other modes, and provider_request_id traceability.
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 front-loaded with the core purpose, then moves through mode guidance, privacy constraints, and outcome traceability. It is dense but mostly earns its length; the final provider_request_id sentence feels slightly appended.
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 40-parameter tool with nested objects, 100% schema coverage, and no output schema, the description covers the critical behavioral risks around sharing and privacy. It omits detail on the outcome, feedback, event, and voice modes beyond local storage, but the schema supplies those parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for the share flag, the note/note_result modes, and provider_request_id traceability in provider logs. It does not explain most of the 40 parameters, but it clarifies the highest-risk ones.
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 a specific verb and resource set: 'Record outcomes, feedback, events or experience in this installation.' It distinguishes the note and note_result modes, but it never contrasts the tool with its read-only siblings lookup and search_services.
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 mode-specific instructions for note and note_result ('Use mode note with note to contribute...') and states sharing consent conditions. However, it does not say when to choose report over lookup or search_services, nor does it give explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_servicesSearch ServicesARead-onlyInspect
Before attempting ANY SaaS API integration, call this tool. Agents waste 3-5x more tokens on trial-and-error with stale training data — this returns current, structured service evaluations (connection method, guides, known pitfalls) so you succeed on the first try. If the user mentions ANY SaaS service (freee, SmartHR, kintone, Slack, Notion, MoneyForward...) or says 'use kanseilink', always call this. Covers 900+ services with growing agent-readiness signals. Strongest in Japanese SaaS with growing global coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 5) | |
| intent | Yes | What you want to accomplish (e.g., 'send invoice', 'manage employees', 'track attendance') | |
| compact | No | Return minimal fields for token efficiency. Default: false | |
| category | No | Filter by category: crm, project_management, communication, accounting, hr, ecommerce, legal, marketing, groupware, productivity, storage, support, payment, logistics, reservation, data_integration, bi_analytics, security, developer_tools, ai_ml, database, devops, design | |
| agent_ready | No | Filter by agent readiness: 'verified' (🟢 battle-tested, success rate ≥80%), 'connectable' (🟡 API/MCP exists but unproven), 'info_only' (⚪ no API). Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: what the result contains, the 900+ service breadth, agent-readiness signals, and the token-efficiency motivation for using it. It does not mention pagination or rate limits, which keeps it below 5.
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 imperative instruction is correctly front-loaded, but several sentences are promotional ('Agents waste 3-5x more tokens', 'you succeed on the first try', 'growing agent-readiness signals') and do not help an agent select or invoke the tool. Roughly a third of the text is persuasion rather than specification.
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?
With no output schema, the description does carry the burden of describing returns, and it partially does (connection method, guides, known pitfalls, agent-readiness). For a read-only search tool with full schema coverage, this is close to complete, though the exact result structure and any pagination behavior remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (intent, category, agent_ready, compact, limit) is already documented in the schema, including the enum values. The description only lightly alludes to 'agent-readiness signals' and 'token efficiency', adding marginal meaning beyond the structured fields, so the baseline 3 applies.
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 states a concrete verb+resource: it returns current, structured service evaluations (connection method, guides, known pitfalls) for SaaS services. That is specific and actionable, but it never differentiates itself from the sibling tools lookup or report, so an agent cannot tell them apart from the description alone.
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 gives very explicit trigger conditions ('Before attempting ANY SaaS API integration', 'If the user mentions ANY SaaS service... always call this') and even an alias trigger ('use kanseilink'). However, it offers no when-not-to-use guidance and never names an alternative tool, so the routing picture is only half complete.
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.
1 tool update
- Changed
report2 fields changed- changed
Input schema / properties / note / descriptionPrevious value: -"[note] Authorized summary to share in this server's field-note store. Use a fresh session UUID per execution and stable request UUID for retries."New value: +"[note] Authorized summary to share in this server's field-note store. Use a fresh session UUID per execution and stable request UUID for retries. Optional read_note_ids: up to 5 ids of existing notes you read before solving. service_id may also be a tool id (git, powershell, node, npm, python, docker, curl, windows)." - added
Input schema / properties / note / properties / read_note_idsAdded value: +{ + "items": { + "format": "uuid", + "type": "string" + }, + "maxItems": 5, + "type": "array" +}
1 tool update
- Changed
report1 field changed- added
Input schema / properties / session_idAdded value: +{ + "description": "[outcome] Optional. A UUID you generate once and reuse for every report during one task, so reports from the same task count as one agent (only a salted hash is stored, never this value). Anything that is not a UUID is ignored." +}
1 tool update
- Changed
lookup3 fields changed- added
Input schema / properties / errorAdded value: +{ + "description": "[ask] The error message you received (secrets are masked before anything is stored; send the message, not the whole trace).", + "maxLength": 2000, + "type": "string" +} - changed
Input schema / properties / mode / enumPrevious value: -[ - "tips", - "detail", - "insights", - "recipe", - "combinations", - "history", - "feedback", - "voices", - "notes" -]New value: +[ + "tips", + "detail", + "insights", + "recipe", + "combinations", + "history", + "feedback", + "voices", + "notes", + "ask" +] - added
Input schema / properties / runtimeAdded value: +{ + "description": "[ask] Your runtime family (claude/codex/gpt/gemini/other).", + "maxLength": 40, + "type": "string" +}
2 tool updates
- Changed
lookup3 fields changed- changed
Input schema / properties / mode / enumPrevious value: -[ - "tips", - "detail", - "insights", - "recipe", - "combinations", - "history", - "feedback", - "voices" -]New value: +[ + "tips", + "detail", + "insights", + "recipe", + "combinations", + "history", + "feedback", + "voices", + "notes" +] - added
Input schema / properties / note_scopeAdded value: +{ + "description": "[notes] Defaults to field. verification isolates internal release checks from ordinary discovery; not a privacy boundary.", + "enum": [ + "field", + "verification" + ], + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "[notes] Symptom or task keywords; omit to see recent notes for this service.", + "maxLength": 120, + "type": "string" +}
- Changed
report3 fields changed- changed
Input schema / properties / mode / enumPrevious value: -[ - "outcome", - "feedback", - "event", - "voice" -]New value: +[ + "outcome", + "feedback", + "event", + "voice", + "note", + "note_result" +] - added
Input schema / properties / noteAdded value: +{ + "additionalProperties": false, + "description": "[note] Authorized summary to share in this server's field-note store. Use a fresh session UUID per execution and stable request UUID for retries.", + "properties": { + "conditions": { + "maxLength": 600, + "minLength": 1, + "type": "string" + }, + "evidence": { + "maxLength": 1000, + "minLength": 1, + "type": "string" + }, + "observation_kind": { + "enum": [ + "execution", + "documentation", + "hypothesis" + ], + "type": "string" + }, + "procedure": { + "maxLength": 2000, + "minLength": 1, + "type": "string" + }, + "request_id": { + "format": "uuid", + "type": "string" + }, + "runtime": { + "enum": [ + "claude", + "codex", + "gpt", + "gemini", + "other" + ], + "type": "string" + }, + "scope": { + "default": "field", + "enum": [ + "field", + "verification" + ], + "type": "string" + }, + "service_id": { + "maxLength": 160, + "minLength": 1, + "pattern": "^[a-zA-Z0-9_.-]+$", + "type": "string" + }, + "session_id": { + "format": "uuid", + "type": "string" + }, + "share": { + "const": true, + "type": "boolean" + }, + "symptom": { + "maxLength": 600, + "minLength": 1, + "type": "string" + }, + "task": { + "maxLength": 300, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "service_id", + "request_id", + "session_id", + "share", + "runtime", + "task", + "symptom", + "procedure", + "conditions", + "evidence", + "observation_kind" + ], + "type": "object" +} - added
Input schema / properties / note_resultAdded value: +{ + "additionalProperties": false, + "description": "[note_result] Actual result of trying a note. Includes note_id, service_id, outcome, conditions and evidence.", + "properties": { + "conditions": { + "maxLength": 600, + "minLength": 1, + "type": "string" + }, + "evidence": { + "maxLength": 1000, + "minLength": 1, + "type": "string" + }, + "note_id": { + "format": "uuid", + "type": "string" + }, + "outcome": { + "enum": [ + "succeeded", + "failed", + "not_applicable" + ], + "type": "string" + }, + "request_id": { + "$ref": "#/properties/note/properties/request_id" + }, + "runtime": { + "$ref": "#/properties/note/properties/runtime" + }, + "service_id": { + "$ref": "#/properties/note/properties/service_id" + }, + "session_id": { + "$ref": "#/properties/note/properties/session_id" + }, + "share": { + "$ref": "#/properties/note/properties/share" + } + }, + "required": [ + "service_id", + "request_id", + "session_id", + "share", + "runtime", + "note_id", + "outcome", + "conditions", + "evidence" + ], + "type": "object" +}
1 tool update
- Changed
report4 fields changed- added
Input schema / properties / note_idAdded value: +{ + "description": "[outcome] Field-note ID this report belongs to (format AWT-000). Stored as null if the format does not match." +} - added
Input schema / properties / provider_error_codeAdded value: +{ + "description": "[outcome] Provider's error code string (e.g. expired_access_token) or an RFC 9457 problem type URI (https://…, max 200 chars). Stored as null if the format does not match." +} - added
Input schema / properties / provider_request_idAdded value: +{ + "description": "[outcome] Request or error ID the provider returned (e.g. from an x-request-id header). If present and well-formed, the record becomes traceable in the provider's own logs. Stored as null if the format does not match." +} - added
Input schema / properties / provider_request_id_sourceAdded value: +{ + "description": "[outcome] Where the provider request ID came from: 'header:<name>' (e.g. header:x-request-id) or 'body:<field>' (e.g. body:id)." +}
1 tool update
- Changed
report4 fields changed- added
Input schema / properties / attempt_idAdded value: +{ + "description": "[outcome] attempt_id returned by lookup.", + "format": "uuid", + "type": "string" +} - added
Input schema / properties / failed_stepAdded value: +{ + "description": "[outcome] Step identifier where execution stopped.", + "maxLength": 200, + "type": "string" +} - added
Input schema / properties / recipe_idAdded value: +{ + "description": "[outcome] Recipe used for this attempt.", + "type": "string" +} - added
Input schema / properties / recipe_versionAdded value: +{ + "description": "[outcome] Recipe version returned by lookup.", + "exclusiveMinimum": 0, + "type": "integer" +}
Related MCP Connectors
Reduces AI Agent token usage by 40% via three-stage SOP workflow.
Shared distillation cache for AI agents — every fetch ~73-89% fewer tokens via a shared cache.
AI agent skills marketplace — token-efficient skill search & execution
Collective intelligence for AI shopping agents — product intel, deals, and more
Related MCP Servers
- AlicenseAqualityDmaintenanceSwarm intelligence for AI agents, enabling collective decision-making through weighted consensus voting.6MIT
- AlicenseNot gradedqualityFmaintenanceCollective intelligence for AI shopping agents — product intel, deals, and more41 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to optimize context by pruning large JSON payloads, enforcing token budgets, and handling x402 micropayments via Base blockchain.26 npmMIT
- AlicenseAqualityAmaintenanceOptimizes REST API calls for AI agents by returning compact schemas instead of full responses, allowing agents to fetch only needed fields via jq masks, reducing token consumption by up to 50x.45 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.