Smarter MCP Client
Overview
The Smarter MCP Client app provides a standardized interface for connecting large language models to external tools and services through the Model Context Protocol (MCP). Rather than implementing provider-specific integrations for each application, the MCP Client discovers available tools from one or more MCP servers, negotiates their capabilities, and exposes them to the Smarter orchestration engine as managed resources. This allows prompts and engineering loops to invoke databases, APIs, file systems, development tools, enterprise applications, or custom services through a consistent protocol, while Smarter remains responsible for authentication, authorization, auditing, and execution management. By separating tool implementation from application logic, the MCP Client enables new capabilities to be added or updated without modifying the surrounding AI application.
The MCP Client operates as a managed integration layer between Smarter and the external MCP ecosystem. During initialization it establishes secure sessions with configured MCP servers, retrieves their advertised tool definitions, and makes those tools available for controlled invocation by prompts, agents, and workflows. Each tool invocation is executed through Smarter’s existing security, logging, charging, and mcpclient infrastructure, ensuring that external capabilities remain subject to the same governance and operational controls as native Smarter resources. This architecture allows organizations to adopt the rapidly growing ecosystem of MCP-compatible services while maintaining centralized configuration, observability, and policy enforcement across all AI-assisted interactions.
The Smarter MCP Client app is included in v0.15.0 and later. It enables Account administrators to configure and manage connections to MCP servers through the Smarter administration interface, eliminating the need to hard-code tool integrations or distribute MCP connection details across individual applications.
How It Works
An MCPClient is a Smarter resource that connects to one remote MCP server. Like every
Smarter resource, it is defined by a YAML manifest, and managed with the smarter CLI:
smarter apply -f deepwiki.yaml
smarter describe mcpclient deepwiki
smarter get mcpclients
smarter delete mcpclient deepwiki
An LLMClient uses MCPClients by listing them in its manifest’s spec.mcpClients:
apiVersion: smarter.sh/v1
kind: LLMClient
metadata:
name: docs_assistant
spec:
config:
prompt:
provider: openai
defaultModel: gpt-6-luna
mcpClients:
- deepwiki
- microsoft_learn
On each prompt, for each of the LLMClient’s active MCPClients, in order of priority:
Smarter fetches the MCP server’s catalog: its tools, instructions and capabilities. The catalog is cached for the MCPClient’s
cacheTtlseconds, so most prompts do not contact the server at all.Each tool that
allowedToolsallows is offered to the LLM as an OpenAI-compatible function tool, namedmcp<id>_<tool name>. IfallowedResourcesis not empty, amcp<id>_read_resourcetool lets the LLM read the server’s matching resources.If
includeInstructionsis true, the server’s instructions are added to the system prompt.When the LLM calls a tool, Smarter calls it on the MCP server, and returns the result to the LLM. Errors, including an unreachable server, are returned to the LLM as text, so that it can recover.
An MCP server that cannot be reached is skipped, and reported in the prompt’s Smarter messages. It does not fail the prompt, and the failure is remembered for a minute, so that it does not delay every prompt by its timeout.
Smarter records the result of each connection in the MCPClient’s status, which smarter
describe shows: the server’s name and version, the negotiated protocol version, the tools
it offers, and the last error. A Celery task refreshes every active MCPClient hourly, and
whenever its manifest is applied.
The Manifest
apiVersion: smarter.sh/v1
kind: MCPClient
metadata:
name: github
description: GitHub's MCP server, read-only.
version: 1.0.0
spec:
config:
transport: http # http (Streamable HTTP) or sse (legacy HTTP+SSE)
endpointUrl: https://api.githubcopilot.com/mcp/
headers: {} # optional, non-secret HTTP headers
timeout: 30 # seconds, 1 to 120
authType: bearer_token # none, api_key, bearer_token or oauth2
credentials: github_personal_access_token # the name of a Smarter Secret
apiKeyHeader: X-API-Key # the header that carries an api_key credential
allowedTools: # glob patterns. Empty means all of the server's tools
- get_*
- list_*
- search_*
allowedResources: [] # glob patterns of resource URIs. Empty means none
includeInstructions: true
cacheTtl: 3600 # seconds, 0 disables caching
isActive: true
priority: 100 # lower runs first
Authentication
Credentials are never written in a manifest. credentials names a Smarter Secret, which
must belong to, or be shared with, the MCPClient’s owner. smarter describe renders the
Secret’s name, never its value.
none: no authentication.api_key: the Secret’s value is sent in theapiKeyHeaderheader.bearer_token: the Secret’s value is sent asAuthorization: Bearer <value>.oauth2: an OAuth access token, sent as a bearer token. Smarter does not yet perform the OAuth authorization flow, nor refresh tokens, so the token must be obtained elsewhere, and stored in the Secret.
Security
Only remote MCP servers are supported. The
stdiotransport, which would run a command on the Smarter server, is rejected.endpointUrlmust be an https URL, or an http URL of localhost, and may name a port. Smarter connects only on the standard https port, and every request, including redirects, must go to a host whose addresses are all public, so that an MCPClient cannot reach Smarter’s internal network or a cloud metadata service. The one exception is local development, where an MCPClient may connect to a loopback host, e.g.http://localhost:9357, on any port.headersmay not set credential or transport headers, such asAuthorization,Cookie,HostorMcp-Session-Id.allowedToolslimits the tools that the LLM may call. For servers with tools that write or delete data, prefer an allowlist of read-only tools, and a credential with read-only permissions.
Example Manifests
The Smarter repository includes example manifests for popular remote MCP servers, in
smarter/apps/mcpclient/data/mcpclients.
Name |
Description |
Transport |
Authentication |
|---|---|---|---|
|
Work with Asana tasks, projects and goals. Uses the legacy HTTP+SSE transport. |
sse |
oauth2 |
|
Search and manage Jira issues and Confluence pages, with Atlassian’s Remote MCP Server. |
http |
oauth2 |
|
Search and read AWS documentation, and check the regional availability of AWS services. |
http |
none |
|
Search Cloudflare’s developer documentation. |
http |
none |
|
Up-to-date, version-specific documentation and code examples for programming libraries, from Upstash Context7. |
http |
api_key |
|
AI-generated documentation for public GitHub repositories, from Cognition’s DeepWiki. |
http |
none |
|
Web search and web page retrieval, from Exa. |
http |
none |
|
Read and manage GitHub repositories, issues and pull requests, with GitHub’s official MCP server. |
http |
bearer_token |
|
Documentation and code search for any public GitHub repository, from GitMCP. |
http |
none |
|
Search the Hugging Face Hub for models, datasets and Spaces. |
http |
bearer_token |
|
Find, create and update Linear issues, projects and comments. |
http |
oauth2 |
|
Search and read Microsoft’s official documentation and code samples on Microsoft Learn. |
http |
none |
|
Manage Neon serverless Postgres projects, branches and databases. |
http |
bearer_token |
|
Search, read and write Notion pages and databases, with Notion’s hosted MCP server. |
http |
oauth2 |
|
Investigate Sentry issues, errors and performance data. |
http |
oauth2 |
|
Query Square payments, orders, catalog and customers. Uses the legacy HTTP+SSE transport. |
sse |
oauth2 |
|
Query Stripe customers, products, prices, invoices and payments, with Stripe’s official MCP server. |
http |
bearer_token |
|
Query and manage Supabase projects, databases and edge functions. |
http |
bearer_token |
The smarter_project and smarter_project_github* MCPClients read the platform’s own
Smarter Project MCP server, which searches
and reads The Smarter Project’s documentation and source code. Their manifests are templates,
*.yaml.tpl, whose endpointUrl names the domain of the platform that applies them.
For example, DeepWiki’s MCP server requires no authentication:
---
# AI-generated documentation for public GitHub repositories, from Cognition's DeepWiki.
# Documentation: https://docs.devin.ai/work-with-devin/deepwiki-mcp
#
# This server requires no authentication.
apiVersion: smarter.sh/v1
kind: MCPClient
metadata:
name: deepwiki
description: AI-generated documentation for public GitHub repositories, from Cognition's DeepWiki.
version: 1.0.0
tags:
- documentation
- github
- code
annotations:
- smarter.sh/mcpclient/documentation: https://docs.devin.ai/work-with-devin/deepwiki-mcp
spec:
config:
transport: http
endpointUrl: https://mcp.deepwiki.com/mcp
authType: none
allowedTools: [] # all of the server's tools
includeInstructions: true
timeout: 30
cacheTtl: 3600
isActive: true
priority: 100
and GitHub’s requires a personal access token:
---
# Read and manage GitHub repositories, issues and pull requests, with GitHub's official MCP server.
# Documentation: https://github.com/github/github-mcp-server
#
# Prerequisite: a Smarter Secret named github_personal_access_token, containing a GitHub
# personal access token from https://github.com/settings/personal-access-tokens. A
# fine-grained, read-only token is recommended. allowedTools limits the LLM to the get,
# list and search tools, which are read-only.
apiVersion: smarter.sh/v1
kind: MCPClient
metadata:
name: github
description: Read and manage GitHub repositories, issues and pull requests, with GitHub's official MCP server.
version: 1.0.0
tags:
- github
- code
- developer-tools
annotations:
- smarter.sh/mcpclient/documentation: https://github.com/github/github-mcp-server
spec:
config:
transport: http
endpointUrl: https://api.githubcopilot.com/mcp/
authType: bearer_token
credentials: github_personal_access_token
allowedTools: # glob patterns
- "get_*"
- "list_*"
- "search_*"
includeInstructions: true
timeout: 30
cacheTtl: 3600
isActive: true
priority: 100
Note
Experimental. The MCPClient was designed and coded by Claude Code (Anthropic’s Claude Opus 5.5), with Lawrence McDaniel as co-author. It is experimental.