Configuration Profiles

Configuration profiles (or profiles for short) are a way for you to group session configurations and supply them to your AI agents. Think of it like login profiles in your desktop, which let you decide what applications are installed and what accesses a user has in your computer. In a similar way, profiles let you bundle specific servers and their configurations to your agent.

Examples

Say you're building a research assistant. A "Research" profile could connect Zotero MCP for reference management, Exa Search for finding relevant papers, PubMedSearch for medical literature, and Memory Tool for storing your research notes - giving your agent everything it needs to help with literature review.

Instead of managing multiple API keys and configurations separately, profiles let you bundle them together and reuse them across your agents. Here's how it works:

To add servers to your profile, you can:

  • From any server page, select the profile you want to add the server to and click "Connect"
  • From Account > Profiles, select your profile and use the "Add Server" search bar shown below
Profiles View

Once you've added servers to your profile, you can connect to them using your profile's API key. The URL will automatically include your profile's configuration:

typescript
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"

// One URL to access all servers in your profile
const url = "https://servers.smithery.ai/ws?profile=clear-basilisk-FucEL4&api_key=your-smithery-api-key"
const transport = new StreamableHTTPClientTransport(url)

Instead of the typical way where you'd need to specify all configurations:

typescript
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { createSmitheryUrl } from "@smithery/sdk/config.js"

// Configure each server separately with their own API keys and settings
const exaUrl = createSmitheryUrl(
"https://servers.smithery.ai/exa/ws",
{
  api_key: "your-exa-api-key",
}
)
const exaTransport = new StreamableHTTPClientTransport(exaUrl)

const zoteroUrl = createSmitheryUrl(
"https://servers.smithery.ai/zotero/ws",
{
  api_key: "your-zotero-api-key",
  library_id: "your-library-id",
  collection_key: "your-collection"
}
)
const zoteroTransport = new StreamableHTTPClientTransport(zoteroUrl)

const pubmedUrl = createSmitheryUrl(
"https://servers.smithery.ai/pubmed/ws",
{
  api_key: "your-pubmed-api-key",
  database: "pubmed",
  max_results: 10
}
)
const pubmedTransport = new StreamableHTTPClientTransport(pubmedUrl)

// ... and so on for each server you want to connect to

Configuration profiles act as a default configuration fallback and makes all saved configuration fields optional. You can still pass configuration fields upon connecting to overwrite the default profile configuration.

Obviously, this is not very useful if you're only connecting to one MCP. It becomes handy when you have multiple MCPs and you don't want to specify configurations for each of them. Some MCPs require OAuth, which may have complex configurations. In the future, you can authenticate via the UI on Smithery instead of offloading it to your end users.