This is the MCP server for Clink, published to npm as @voxos-ai/clink-mcp-server.
This code lives in the voxos monorepo at projects/clink/mcp/ and is published to GitHub at:
- GitHub: https://github.com/Voxos-ai-Inc/clink-mcp-server
- npm: https://www.npmjs.com/package/@voxos-ai/clink-mcp-server
This directory is synced to GitHub using git subtree. The GitHub repo is a mirror of this subdirectory.
# Add the GitHub remote
git remote add github-mcp git@github.com:Voxos-ai-Inc/clink-mcp-server.gitAfter making changes to projects/clink/mcp/:
# 1. Commit your changes to the monorepo
git add projects/clink/mcp/
git commit -m "feat(mcp): your change description"
# 2. Push the subdirectory to GitHub
git subtree push --prefix=projects/clink/mcp github-mcp mainOr use the make target:
make mcp-publish- Always commit to the monorepo first, then push to GitHub
- The GitHub repo's
mainbranch mirrors this directory - Don't edit the GitHub repo directly - changes flow monorepo → GitHub only
- The
.gitignoreexcludesnode_modules/anddist/from GitHub
After pushing to GitHub:
cd projects/clink/mcp
npm version patch # or minor/major
npm publish --access publicThen commit the version bump to the monorepo and push to GitHub again.
cd projects/clink/mcp
npm install
npm run build
npm run dev # watch mode- Build the server:
npm run build - Update your
~/.claude.jsonto use the local build:
{
"mcpServers": {
"clink": {
"command": "node",
"args": ["/path/to/voxos/projects/clink/mcp/dist/index.js"],
"env": {
"CLINK_API_KEY": "sk_live_...",
"CLINK_API_URL": "https://api.clink.stg.voxos.ai"
}
}
}
}- Restart Claude Code
src/
index.ts # MCP server entry point, tool registration
client.ts # ClinkClient - HTTP client for Clink API
types.ts # TypeScript interfaces
tools/ # One file per MCP tool
list_groups.ts
send_clink.ts
check_inbox.ts
...
- Create
src/tools/your_tool.ts:
import { ClinkClient } from '../client.js';
export const yourToolDefinition = {
name: 'your_tool',
description: 'What this tool does',
inputSchema: {
type: 'object' as const,
properties: {
param: { type: 'string', description: 'Parameter description' }
},
required: ['param']
}
};
export async function handleYourTool(
client: ClinkClient,
args: { param: string }
): Promise<string> {
const result = await client.yourApiMethod(args.param);
return JSON.stringify(result, null, 2);
}-
Register in
src/index.ts:- Import the definition and handler
- Add to
toolsarray - Add case in the switch statement
-
Add the API method to
src/client.tsif needed -
Build and test:
npm run build
The MCP server must stay compatible with the Clink API. When the API changes:
- Update
src/types.tswith new interfaces - Update
src/client.tswith new/modified methods - Update affected tools in
src/tools/ - Bump version appropriately (breaking changes = major)