This example demonstrates how Oplink + mcporter let you call any tool from any registered MCP server, with tool discovery handled automatically. It mixes an stdio server and an HTTP server to showcase both transports.
externalServers in one workflowdescribe_tools({ "workflow": "universal_helper" })examples/universal-proxy-demo/.mcp-workflows/servers.jsonexamples/universal-proxy-demo/.mcp-workflows/workflows.yamlchrome-devtools (stdio): launched with npx chrome-devtools-mcp@latestdeepwiki (HTTP SSE): https://mcp.deepwiki.com/sseuniversal_helper:
description: "Proxy Chrome DevTools + DeepWiki MCP tools via auto‑discovery"
prompt: |
You expose all tools discovered from the listed external MCP servers.
Accept a JSON object with the fields:
- tool: the tool name to run (e.g., chrome-devtools:take_screenshot or deepwiki:deepwiki_search)
- server (optional): the alias to use when tool is not prefixed
- args (optional): arguments for the tool call
Use describe_tools({ "workflow": "universal_helper" }) to discover available tools.
externalServers:
- chrome-devtools
- deepwiki
pnpm -r --filter ./packages/oplink dev -- --config examples/universal-proxy-demo/.mcp-workflows
Connect your MCP client to the running Oplink server. By default, only the universal_helper and scripted workflows are exposed, plus helper tools (such as describe_tools and external_auth_setup). If you also want one MCP tool per external tool (e.g., deepwiki.read_wiki_structure), start Oplink with:
OPLINK_AUTO_REGISTER_EXTERNAL_TOOLS=1 pnpm -r --filter ./packages/oplink dev -- --config examples/universal-proxy-demo/.mcp-workflows
describe_tools({ "workflow": "universal_helper" })
universal_helper({
"tool": "chrome-devtools:take_screenshot",
"args": { "url": "https://example.com", "format": "png" }
})
universal_helper({
"server": "deepwiki",
"tool": "deepwiki_search",
"args": { "query": "Model Context Protocol" }
})
screenshot_and_lookup:
description: "Take a screenshot and then query DeepWiki"
runtime: scripted
parameters:
url: { type: string, required: true }
query: { type: string, required: true }
steps:
- call: chrome-devtools:navigate_page
args: { type: url, url: "{{ url }}" }
- call: chrome-devtools:take_screenshot
args: { format: "png", fullPage: true }
- call: deepwiki:deepwiki_search
args: { query: "{{ query }}" }
That’s it — mcporter handles discovery, transport, and execution behind the scenes, and Oplink proxies everything through one workflow.