feat: add mcp server, reorganize repo

This commit is contained in:
2026-09-03 17:20:08 +05:00
parent c1dda4d257
commit 1fd8ad6b50
48 changed files with 1691 additions and 12467 deletions
+21
View File
@@ -0,0 +1,21 @@
import { createMcpHandler } from "mcp-handler";
import { registerDuckTools } from "@/lib/mcp";
export const runtime = "nodejs";
const post = createMcpHandler(
async (server) => {
registerDuckTools(server);
},
{
serverInfo: { name: "rubber-duck-mcp", version: "1.0.0" },
},
);
export async function GET(req: Request) {
return post(req);
}
export async function POST(req: Request) {
return post(req);
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

+49
View File
@@ -0,0 +1,49 @@
:root {
--background: #ffffff;
--foreground: #171717;
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}
html {
height: 100%;
}
html,
body {
max-width: 100vw;
overflow-x: hidden;
}
body {
min-height: 100%;
display: flex;
flex-direction: column;
color: var(--foreground);
background: var(--background);
font-family: Arial, Helvetica, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
a {
color: inherit;
text-decoration: none;
}
@media (prefers-color-scheme: dark) {
html {
color-scheme: dark;
}
}
+15
View File
@@ -0,0 +1,15 @@
import type { Metadata } from "next";
import "./globals.css";
export const metadata: Metadata = {
title: "Rubber Duck MCP",
description: "MCP server for rubber duck debugging — quack() to articulate your thinking.",
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
+23
View File
@@ -0,0 +1,23 @@
export default function Home() {
return (
<main style={{ fontFamily: "system-ui, sans-serif", maxWidth: 640, margin: "0 auto", padding: "3rem 1rem" }}>
<h1>Rubber Duck MCP</h1>
<p>
MCP-сервер для техники «резиновая уточка»: когда ИИ застревает, он вызывает инструмент{" "}
<code>quack()</code>, чтобы сформулировать мысль и продолжить. Сервер работает в режиме
Streamable HTTP и предназначен для подключения в Cursor, Claude Desktop и других MCP-клиентах.
</p>
<h2>Эндпоинт</h2>
<p>
<code>/api/mcp</code> подключите этот URL как MCP-сервер (тип Streamable HTTP).
</p>
<h2>Инструменты</h2>
<ul>
<li>
<code>quack</code> возвращает кряк. Опциональный параметр <code>mood</code>:{" "}
<code>happy | confused | excited | sleepy</code>.
</li>
</ul>
</main>
);
}