@variant/mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@variant/mcp-serverset up and start the MCP server with my custom tools"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@variant/mcp-server
Shared MCP HTTP server infrastructure for plugin projects.
Intended to use with Claude plugin projects with colocated MCP and Skills, but can also be used to build standalone MCP servers for other purposes. See plugin template for usage examples.
It provides:
Express + Streamable HTTP MCP transport setup
OAuth/OIDC auth helpers
Runtime configuration loading from environment variables and plugin config
Plugin tool registration helpers
MCP widget registration and HTML loading
A Vite-based widget build CLI
Install
pnpm add @variant/mcp-serverRelated MCP server: @rishblob/canvas-mcp-server
Server Usage
import {
createAndStartMcpServer,
definePluginTools,
readPluginMcpServerConfig,
} from '@variant/mcp-server';
import { registerWhoami } from '../tools/whoami/whoami.js';
const registerTools = definePluginTools([registerWhoami]);
const config = readPluginMcpServerConfig();
await createAndStartMcpServer(config, registerTools);Plugin projects are expected to run from a plugin root containing:
mcp-server/assets/icon.png.claude-plugin/plugin.jsonoptional
skills/*/tools/*/index.htmlwidget source directories
Tool Authoring
import { getRequestContext, log, type McpServer } from '@variant/mcp-server';
import { z } from 'zod';
export function registerMyTool(server: McpServer): void {
server.registerTool(
'my-tool',
{
title: 'My Tool',
description: 'Does something useful',
inputSchema: { param: z.string() },
},
async ({ param }) => {
const context = getRequestContext();
log('info', 'my-tool called', { userId: context?.userId });
return { content: [{ type: 'text', text: param }] };
},
);
}Widgets
Widget projects can use the shared Vite config:
import { defineWidgetViteConfig } from '@variant/mcp-server/vite';
export default defineWidgetViteConfig();Build widgets from the plugin root:
pnpm exec variant-build-widgets
pnpm exec variant-build-widgets -- --watch --mode developmentThe CLI discovers skills/*/tools/*/index.html directories and writes built widgets to mcp-server/dist/widgets/<tool-name-kebab>/index.html.
Browser widget entrypoints can use:
import { mountWidget } from '@variant/mcp-server/widget';Server-side tools can register widget resources with:
import { registerWidgetTool } from '@variant/mcp-server';Runtime Configuration
Configuration is read from environment variables with plugin defaults loaded by the host project.
Common environment variables:
Variable | Default | Description |
|
| HTTP bind host |
|
| HTTP bind port |
|
| Streamable HTTP MCP route |
| plugin config | Enables bearer auth |
| plugin config | OAuth/OIDC issuer URL |
| plugin config | OAuth client ID |
| none | OAuth client secret for confidential-client flows |
| plugin config | Public base URL used in metadata |
Exports
@variant/mcp-server@variant/mcp-server/vite@variant/mcp-server/widget@variant/mcp-server/build-widgets
Development
pnpm install
pnpm typecheck # tsc --noEmit
pnpm lint # biome check .
pnpm format # biome format --write .
pnpm test # vitest run
pnpm build # tsc
pnpm check-exports # validate published types/exports resolve for ESM consumers
pnpm verify # run all of the abovePublishing
pnpm install
pnpm build
pnpm publish --access publicThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceEnables MCP client interaction via streamable HTTP, providing example tools (echo, getPostsByUser) and resources (posts, users) with pluggable authentication providers.Last updated5MIT
- Alicense-qualityDmaintenanceTypeScript MCP server for Canvas LMS that exposes Canvas API workflows for courses, assignments, submissions, modules, pages, discussions, announcements, files, users, enrollments, conversations, calendar, and utility endpoints.Last updated3ISC
- Alicense-qualityBmaintenanceA production-minded MCP server kit that provides OAuth 2.1/PKCE authentication, rate limiting, scope-gated tools, and two-phase confirmation for building secure MCP servers with custom tools, identity, and storage.Last updated19MIT
- Flicense-qualityBmaintenanceA simple HTTP-based MCP server that provides demo tools (get_test_string, echo, check_maintenance), greeting prompts, and test resources, with optional OAuth 2.1 support.Last updated
Related MCP Connectors
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
The official MCP Server from Mia-Platform to interact with Mia-Platform Console
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/varianter/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server