Skip to content

Commit c5fa952

Browse files
committed
new blog UI+articles
1 parent f1b79e0 commit c5fa952

File tree

10 files changed

+611
-25
lines changed

10 files changed

+611
-25
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
---
2+
slug: introducing-utcp
3+
title: Introducing UTCP - The Direct Alternative to MCP
4+
tags: [announcement, utcp, mcp, tool-calling, ai-agents]
5+
---
6+
7+
# Introducing UTCP: The Direct Alternative to MCP
8+
9+
We're excited to introduce the **Universal Tool Calling Protocol (UTCP)** — a modern, flexible, and scalable standard for defining and interacting with tools across a wide variety of communication protocols.
10+
11+
<!--truncate-->
12+
13+
## Why UTCP?
14+
15+
While the Model Context Protocol (MCP) has made strides in standardizing AI-tool interactions, it comes with inherent limitations that UTCP addresses head-on:
16+
17+
### 🚀 **Zero Latency Overhead**
18+
Unlike MCP's proxy-based architecture, UTCP enables direct tool calls without intermediary layers. Your AI agents communicate directly with tools, eliminating unnecessary latency.
19+
20+
### 🔒 **Enhanced Security**
21+
UTCP's design principles prioritize security from the ground up. With direct protocol support and built-in authentication mechanisms, you get enterprise-grade security without compromising performance.
22+
23+
### 🌐 **Protocol Flexibility**
24+
While MCP is limited to specific transport mechanisms, UTCP works seamlessly across:
25+
- HTTP/HTTPS
26+
- GraphQL
27+
- gRPC
28+
- WebSockets
29+
- CLI interfaces
30+
- Custom protocols
31+
32+
## Key Features
33+
34+
### Direct Tool Integration
35+
```typescript
36+
// Example: Direct HTTP tool call with UTCP
37+
const weatherTool = {
38+
name: "get_weather",
39+
description: "Get current weather for a location",
40+
provider: {
41+
type: "http",
42+
endpoint: "https://api.weather.com/v1/current",
43+
method: "GET"
44+
},
45+
parameters: {
46+
location: { type: "string", description: "City name" }
47+
}
48+
}
49+
```
50+
51+
### Universal Protocol Support
52+
UTCP isn't bound to a single communication method. Whether your tool speaks HTTP, GraphQL, or even CLI commands, UTCP can handle it:
53+
54+
```yaml
55+
# GraphQL Tool Definition
56+
name: user_search
57+
provider:
58+
type: graphql
59+
endpoint: https://api.example.com/graphql
60+
query: |
61+
query GetUser($id: ID!) {
62+
user(id: $id) { name email }
63+
}
64+
```
65+
66+
### Built-in Authentication
67+
Security is paramount. UTCP supports multiple authentication methods out of the box:
68+
69+
```json
70+
{
71+
"auth": {
72+
"type": "bearer",
73+
"token": "${API_KEY}"
74+
}
75+
}
76+
```
77+
78+
## Getting Started
79+
80+
Ready to try UTCP? Here's how you can get started:
81+
82+
1. **Explore the Documentation**: Check out our comprehensive [documentation](/docs) to understand UTCP's capabilities
83+
2. **Browse the Registry**: Visit our [tool registry](/registry) to see available UTCP-compatible tools
84+
3. **Join the Community**: Connect with other developers on our [Discord](https://discord.gg/ZpMbQ8jRbD)
85+
86+
## The Road Ahead
87+
88+
UTCP is more than just a protocol — it's a vision for the future of AI-tool interactions. We're building:
89+
90+
- **Expanded Protocol Support**: More communication protocols and standards
91+
- **Enhanced Tooling**: Better development tools and SDKs
92+
- **Community Growth**: A thriving ecosystem of tools and integrations
93+
94+
## Community and Contributions
95+
96+
UTCP is open source and community-driven. We welcome contributions, feedback, and collaboration from developers worldwide. Whether you're building tools, implementing clients, or improving the specification, there's a place for you in the UTCP community.
97+
98+
### Get Involved
99+
- 📖 **Documentation**: Help improve our docs and guides
100+
- 🔧 **Tool Development**: Create new UTCP-compatible tools
101+
- 🐛 **Issue Reporting**: Report bugs and suggest improvements
102+
- 💬 **Community Support**: Help other developers on Discord
103+
104+
---
105+
106+
*UTCP represents the next evolution in AI-tool communication. Join us in building a more direct, efficient, and secure future for AI agent interactions.*
107+
108+
**Ready to dive in?** [Start with our documentation](/docs) or [explore the tool registry](/registry) today!
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
slug: mcp-servers-nightmare
3+
title: MCP servers are a nightmare for engineers
4+
tags: [mcp, servers, scalability, authentication, engineering, tool-calling]
5+
---
6+
7+
# MCP servers are a nightmare for engineers
8+
9+
> *"If you have more than five tools, an MCP rollout feels like spawning a new micro-service for **every** function call. We ended up with 40 tiny servers, 40 sets of secrets, and one giant Ops headache."*
10+
> *Engineering team at a Series B startup*
11+
12+
MCP (Model Context Protocol) was supposed to "standardise tool calling for LLMs." Instead it created a forest of mini-services that crumble under real-world scale and expose brand-new security holes. Here's why production teams are quietly ripping MCP back out of their stacks.
13+
14+
<!--truncate-->
15+
16+
---
17+
18+
## 1. One API ⇒ One MCP server ⇒ One scaling nightmare
19+
20+
**Design flaw:** Every tool definition lives behind its own long-running MCP server. A project with 20 tools is now a 20-service deployment. Horizontal scaling becomes a Knuthian combinatorial explosion:
21+
22+
```yaml
23+
# naïve K8s layout
24+
weather-mcp × N replicas
25+
db-mcp × N replicas
26+
payment-mcp × N replicas
27+
# ... and so on
28+
```
29+
30+
* **Orchestration overhead:** service discovery, health checks, autoscaling rules, and CI/CD pipelines multiply linearly.
31+
* **Resource thrash:** idle MCP servers still hold sockets and memory; at peak they compete for the same CPU shares.
32+
* **Cold-start pain:** spawning a new server per customer or per tenant means hundreds of containers during load spikes — exactly the kind of burst K8s is slowest to absorb.
33+
34+
Even MCP contributors admit that "one server per API sounds crazy if you're doing backend" after wrestling with dozens of them in production.
35+
36+
---
37+
38+
## 2. “Bring-your-own-auth” is a security trap
39+
40+
The spec punts on authentication, so every vendor rolled their own:
41+
42+
* **OAuth, mutual-TLS, Static tokens,** or — far too often — **nothing at all.** Engineers joke that "the S in MCP stands for Security" precisely because it doesn't.
43+
* **Key-store of doom:** each server needs credentials for the upstream tool *and* for the calling agent. When one leaks, the blast radius includes *every* downstream service accessible through that server. Hackers love a single vault full of all your API keys.
44+
* **Proven attack vectors:** MCP servers often run with elevated privileges and expose additional attack surface through their custom authentication mechanisms.
45+
46+
The security model fundamentally breaks down when you have dozens of independent servers, each implementing their own auth patterns.
47+
48+
---
49+
50+
## 3. Debugging distributed auth failures, not latency numbers
51+
52+
Latency is fixable with caches; **broken auth flows** cascade:
53+
54+
1. Token refresh fails in one MCP server.
55+
2. All agents routed to that pod get 401s.
56+
3. Autoscaler spawns more replicas of the *broken* image.
57+
4. Your incident channel fills with “tool unavailable” alerts while dashboards stay green (the servers are *up*, just unauthorised).
58+
59+
Tracing the root cause means correlating logs across **agent → client SDK → MCP server → tool → identity provider**. That’s five codebases, often in five languages.
60+
61+
---
62+
63+
## 4. MCP locks you *out* of real scaling patterns
64+
65+
MCP’s JSON-RPC-over-stdio/HTTP tunnel ignores native features of the protocols it proxies:
66+
67+
* **WebSockets & streaming gRPC**: forced back into polling loops; throughput nose-dives when messages surge.
68+
* **Binary blobs**: base64 inflation wrecks memory-bandwidth-sensitive workloads (vision, audio).
69+
* **Fan-out fan-in patterns**: you still need a coordinator outside MCP, defeating its “single interface” pitch.
70+
71+
Teams building high-frequency trading bots reported a 20× drop in tick rate once they moved feeds through MCP.
72+
73+
---
74+
75+
## A labyrinth of servers
76+
77+
If you've already tackled the operational complexity listed above and think MCP servers are a good investment of your engineering time, go ahead — just make sure to budget for the maintenance work that's inevitably needed. Another option is to adopt existing MCP server frameworks and accept the architectural trade-offs.
78+
79+
To solve this problem at scale, we've been experimenting with a more boring approach: **UTCP (Universal Tool Calling Protocol)**. The idea is simple: let your agents speak the tool's native protocol directly, without a proxy layer.
80+
81+
The architecture is much less interesting: tools are just API definitions, calls go direct to the service, and you reuse whatever auth infrastructure you already have. It scales like any stateless API because that's exactly what it is.
82+
83+
---
84+
85+
### Bottom line
86+
87+
**MCP is great for what it was designed for:** sharing prompts, resources, and context between AI systems. When you need to give an LLM access to your company knowledge base or standardize prompt templates, MCP shines.
88+
89+
**But tool calling? That's where MCP becomes a nightmare.**
90+
91+
Forcing every API call through a JSON-RPC proxy server turns simple HTTP requests into distributed systems nightmares. You end up with **microservices-sprawl-as-a-spec** combined with DIY security theatre. If your architecture already struggles with too many services and secrets, MCP's tool calling approach adds gasoline to the fire.
92+
93+
For tool calling, the fastest fix is the simplest: delete the proxy, call the API directly.

blog/authors.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
utcp-team:
2+
name: UTCP Team
3+
title: Core Contributors
4+
url: https://github.com/universal-tool-calling-protocol
5+
image_url: /img/black-logo-square.png
6+
7+
utcp-maintainer:
8+
name: UTCP Maintainer
9+
title: Protocol Maintainer
10+
url: https://github.com/universal-tool-calling-protocol
11+
image_url: /img/black-logo-square.png

docusaurus.config.ts

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ const config: Config = {
5050
showLastUpdateTime: true,
5151
includeCurrentVersion: true,
5252
},
53+
blog: {
54+
showReadingTime: true,
55+
feedOptions: {
56+
type: ['rss', 'atom'],
57+
xslt: true,
58+
},
59+
editUrl: 'https://github.com/universal-tool-calling-protocol/utcp-specification/tree/main/',
60+
blogSidebarCount: 'ALL',
61+
blogSidebarTitle: 'All posts',
62+
},
5363
theme: {
5464
customCss: './src/css/custom.css',
5565
},
@@ -113,13 +123,7 @@ const config: Config = {
113123
position: 'left',
114124
label: 'Docs',
115125
},
116-
{
117-
type: 'doc',
118-
docId: 'about-us',
119-
position: 'left',
120-
label: 'About',
121-
docsPluginId: 'about',
122-
},
126+
123127
{
124128
type: 'doc',
125129
docId: 'RFC',
@@ -130,16 +134,15 @@ const config: Config = {
130134
{
131135
to: '/registry',
132136
position: 'left',
133-
label: 'Registry',
137+
label: 'Tool Registry',
134138
},
135139
{
136140
type: 'docsVersionDropdown',
137141
position: 'right',
138142
docsPluginId: 'default',
139143
},
140144
{
141-
href: 'https://github.com/universal-tool-calling-protocol',
142-
label: 'GitHub',
145+
type: 'custom-github',
143146
position: 'right',
144147
},
145148
{
@@ -209,8 +212,33 @@ const config: Config = {
209212
],
210213
},
211214
{
212-
title: 'Legal',
215+
title: 'Resources',
213216
items: [
217+
{
218+
label: 'Blog',
219+
to: '/blog',
220+
},
221+
{
222+
label: 'Registry',
223+
to: '/registry',
224+
},
225+
],
226+
},
227+
{
228+
title: 'About',
229+
items: [
230+
{
231+
label: 'About Us',
232+
to: '/about/about-us',
233+
},
234+
{
235+
label: 'RFC',
236+
to: '/about/RFC',
237+
},
238+
{
239+
label: 'Contributing',
240+
to: '/about/contributing',
241+
},
214242
{
215243
label: 'Impressum',
216244
to: '/about/impressum',

0 commit comments

Comments
 (0)