This example demonstrates how to integrate Linear (issue management) and Discord (messaging) MCP servers into Oplink workflows. You can fetch Linear issues and send Discord notifications to assignees.
Linear's hosted MCP server uses OAuth 2.1. mcporter handles the browser/device flow automatically.
pnpm bootstrap:linear
servers.json.example → servers.json and ensures .tokens/linear existsbot scope and required permissionsexport DISCORD_BOT_TOKEN="your-bot-token-here"
# Optional if you want the bootstrap script to inline credentials
export LINEAR_CLIENT_ID="client-id"
export LINEAR_CLIENT_SECRET="client-secret"
After running pnpm bootstrap:linear, .mcp-workflows/servers.json contains:
npx mcp-remote https://mcp.linear.app/mcp (OAuth, token cache at .tokens/linear)npx @chinchillaenterprises/mcp-discord stdio serverInspect the Linear catalog:
npx mcporter list linear --config examples/linear-discord-demo/.mcp-workflows
These workflows expose all tools from Linear and Discord:
linear_helper: Access all Linear MCP toolsdiscord_helper: Access all Discord MCP toolslinear_discord_helper: Access both Linear and Discord toolsUsage:
describe_tools({ "workflow": "linear_helper" })
discord_helper({
"tool": "send_message",
"args": {
"channelId": "123456789012345678",
"content": "Hello from Linear!"
}
})
export DISCORD_BOT_TOKEN="your-bot-token"
pnpm -r --filter ./packages/oplink dev -- --config examples/linear-discord-demo/.mcp-workflows
describe_tools({ "workflow": "linear_helper" })
describe_tools({ "workflow": "discord_helper" })
discord_helper({
"tool": "send_message",
"args": {
"channelId": "123456789012345678",
"content": "📋 New Linear issue: Fix authentication bug"
}
})
servers.json exists in .mcp-workflows/DISCORD_BOT_TOKEN.mcp-workflows/.tokens/linear and re-run pnpm bootstrap:lineardescribe_tools to verify the exact tool names exposed by each server