index.js•2.88 kB
#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "mcp-fun-server",
version: "1.0.0"
});
// No input needed since we're getting random content
const inputSchema = {};
async function getRandomJoke() {
try {
const response = await fetch('https://v2.jokeapi.dev/joke/Any?blacklistFlags=nsfw,religious,political,racist,sexist,explicit');
if (!response.ok) {
throw new Error('Failed to fetch joke');
}
const joke = await response.json();
let jokeText;
if (joke.type === 'single') {
jokeText = joke.joke;
} else {
jokeText = `${joke.setup}\n\n${joke.delivery}`;
}
return {
content: [{ type: "text", text: jokeText }]
};
} catch (error) {
throw new Error(`Failed to get joke: ${error.message}`);
}
}
async function getRandomQuote() {
try {
const response = await fetch('https://zenquotes.io/api/random');
if (!response.ok) {
throw new Error('Failed to fetch quote');
}
const [quote] = await response.json();
return {
content: [{
type: "text",
text: `"${quote.q}"\n\n- ${quote.a}`
}]
};
} catch (error) {
throw new Error(`Failed to get quote: ${error.message}`);
}
}
async function getRandomFact() {
try {
const response = await fetch('https://uselessfacts.jsph.pl/api/v2/facts/random');
if (!response.ok) {
throw new Error('Failed to fetch fact');
}
const fact = await response.json();
return {
content: [{ type: "text", text: fact.text }]
};
} catch (error) {
throw new Error(`Failed to get fact: ${error.message}`);
}
}
async function getRandomAdvice() {
try {
const response = await fetch('https://api.adviceslip.com/advice');
if (!response.ok) {
throw new Error('Failed to fetch advice');
}
const advice = await response.json();
return {
content: [{ type: "text", text: advice.slip.advice }]
};
} catch (error) {
throw new Error(`Failed to get advice: ${error.message}`);
}
}
server.registerTool("random-joke", {
title: "Random Joke Tool",
description: "Get a random joke",
inputSchema,
}, getRandomJoke);
server.registerTool("random-quote", {
title: "Random Quote Tool",
description: "Get a random inspirational quote",
inputSchema,
}, getRandomQuote);
server.registerTool("random-fact", {
title: "Random Fact Tool",
description: "Get a random interesting fact",
inputSchema,
}, getRandomFact);
server.registerTool("random-advice", {
title: "Random Advice Tool",
description: "Get a random piece of advice",
inputSchema,
}, getRandomAdvice);
const transport = new StdioServerTransport();
await server.connect(transport);