Skip to content

Commit e46e62d

Browse files
committed
updated blog + ui
1 parent 0a65867 commit e46e62d

File tree

3 files changed

+50
-6
lines changed

3 files changed

+50
-6
lines changed

blog/2025-08-05-mcp-servers-nightmare.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ As Marc, another early adopter, recalls from his first attempt:
3232

3333
> “I implement this class… and then I'm like, okay, let's connect to it. Connect, doesn't work. Why? How? And then I spend a bunch of time and then only realize this only works if the process calling this *is* the process which has this client on it. Which is like, what the fuck?”
3434
35-
This single, poorly explained assumptionthat the client *must spawn your server as a child process*is the source of immense pain. But the confusion runs deeper.
35+
This single, poorly explained assumption, that the client *must spawn your server as a child process*, is the source of immense pain. But the confusion runs deeper.
3636

3737
* **Ambiguous Transports:** The spec says it connects via “STDIO.” But what does that mean? Is it a raw `stdin/stdout` pipe? Is it a custom framing protocol over that pipe? Is it a TCP socket? You only discover the truth through trial and error.
3838
* **Contradictory Examples:** The official GitHub reference servers receive breaking changes weekly, often without a clear changelog, leaving developers to reverse-engineer why their once-working implementation suddenly fails.
@@ -51,7 +51,7 @@ This got worse in a real-world scenario:
5151

5252
1. **The Setup:** A user has two VS Code windows open. One project is configured to use OpenAI, the other to use Gemini.
5353
2. **The MCP Problem:** MCP assumes one server process. When an AI client like Cursor connects to the single JavaScript "bridge," it has no idea which VS Code window (and which configuration) it's supposed to be talking to.
54-
3. **The Nightmare Hack:** Simone's only solution was to have his extension write the network port into a temporary file so the bridge could find it. He was juggling PIDs and file I/O just to manage state between two windowsa problem created entirely by MCP's rigid process model.
54+
3. **The Nightmare Hack:** Simone's only solution was to have his extension write the network port into a temporary file so the bridge could find it. She was juggling PIDs and file I/O just to manage state between two windows, a problem created entirely by MCP's rigid process model.
5555

5656
---
5757

src/css/custom.css

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,3 +322,31 @@ body[class*="blog"] aside:hover {
322322
opacity: 1 !important;
323323
transition: opacity 0.3s ease !important;
324324
}
325+
326+
/* GitHub navbar icon styling */
327+
.github-navbar-icon {
328+
display: inline-block;
329+
transition: all 0.2s ease;
330+
opacity: 0.8;
331+
}
332+
333+
.github-navbar-icon:hover {
334+
opacity: 1;
335+
transform: scale(1.1);
336+
}
337+
338+
/* Dark mode color for GitHub icon */
339+
[data-theme='dark'] .github-navbar-icon {
340+
color: var(--ifm-navbar-link-color);
341+
}
342+
343+
/* Light mode color for GitHub icon */
344+
[data-theme='light'] .github-navbar-icon {
345+
color: var(--ifm-navbar-link-color);
346+
}
347+
348+
/* Navbar link hover effect for GitHub icon */
349+
.navbar__item.navbar__link:hover .github-navbar-icon {
350+
opacity: 1;
351+
transform: scale(1.1);
352+
}

src/theme/NavbarItem/CustomGithubNavbarItem.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,36 @@ interface CustomGithubNavbarItemProps {
77
[key: string]: any;
88
}
99

10+
// GitHub Icon component for navbar
11+
const GitHubIcon: React.FC<{ className?: string }> = ({ className = "" }) => (
12+
<svg
13+
className={`github-navbar-icon ${className}`}
14+
width="20"
15+
height="20"
16+
viewBox="0 0 24 24"
17+
fill="currentColor"
18+
xmlns="http://www.w3.org/2000/svg"
19+
>
20+
<path d="M12 0C5.374 0 0 5.373 0 12 0 17.302 3.438 21.8 8.207 23.387c.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.30.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"/>
21+
</svg>
22+
);
23+
1024
const CustomGithubNavbarItem: React.FC<CustomGithubNavbarItemProps> = ({ mobile, ...props }) => {
1125
const location = useLocation();
1226
const isBlogPage = location.pathname.startsWith('/blog');
1327

14-
// For mobile view, always show simple version
28+
// For mobile view, always show simple version with icon
1529
if (mobile) {
1630
return (
1731
<a
1832
href="https://github.com/universal-tool-calling-protocol"
1933
target="_blank"
2034
rel="noopener noreferrer"
2135
className="navbar__item navbar__link"
36+
title="GitHub"
2237
{...props}
2338
>
24-
GitHub
39+
<GitHubIcon />
2540
</a>
2641
);
2742
}
@@ -31,16 +46,17 @@ const CustomGithubNavbarItem: React.FC<CustomGithubNavbarItemProps> = ({ mobile,
3146
return <GitHubButton />;
3247
}
3348

34-
// Normal GitHub link for non-blog pages
49+
// Normal GitHub link for non-blog pages with icon
3550
return (
3651
<a
3752
href="https://github.com/universal-tool-calling-protocol"
3853
target="_blank"
3954
rel="noopener noreferrer"
4055
className="navbar__item navbar__link"
56+
title="GitHub"
4157
{...props}
4258
>
43-
GitHub
59+
<GitHubIcon />
4460
</a>
4561
);
4662
};

0 commit comments

Comments
 (0)