From ef88d6a2eaf324b0f279369fa117ffb494df7c0d Mon Sep 17 00:00:00 2001 From: vipyne Date: Mon, 3 Nov 2025 14:53:28 -0600 Subject: [PATCH] update example 39-mcp-stdio.py to use different mcp server https://www.loom.com/share/a9f0a270261d4c6cb054ab2b4dcd6084 SO to Rijksmuseum MCP https://github.com/r-huijts/rijksmuseum-mcp --- examples/foundational/39-mcp-stdio.py | 30 ++++++++++++++------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/examples/foundational/39-mcp-stdio.py b/examples/foundational/39-mcp-stdio.py index 5c570d5fd..96ed96081 100644 --- a/examples/foundational/39-mcp-stdio.py +++ b/examples/foundational/39-mcp-stdio.py @@ -6,6 +6,7 @@ import asyncio import io +import json import os import re import shutil @@ -63,10 +64,12 @@ class UrlToImageProcessor(FrameProcessor): await self.push_frame(frame, direction) def extract_url(self, text: str): - pattern = r"!\[[^\]]*\]\((https?://[^)]+\.(png|jpg|jpeg|PNG|JPG|JPEG))\)" - match = re.search(pattern, text) - if match: - return match.group(1) + data = json.loads(text) + if "artObject" in data: + return data["artObject"]["webImage"]["url"] + if "artworks" in data and len(data["artworks"]): + return data["artworks"][0]["webImage"]["url"] + return None async def run_image_process(self, image_url: str): @@ -130,9 +133,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): mcp = MCPClient( server_params=StdioServerParameters( command=shutil.which("npx"), - args=["-y", "@programcomputer/nasa-mcp-server@latest"], - # https://api.nasa.gov - env={"NASA_API_KEY": os.getenv("NASA_API_KEY")}, + # https://github.com/r-huijts/rijksmuseum-mcp + args=["-y", "mcp-server-rijksmuseum"], + env={"RIJKSMUSEUM_API_KEY": os.getenv("RIJKSMUSEUM_API_KEY")}, ) ) except Exception as e: @@ -146,10 +149,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): system = f""" You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. - You have access to a number of tools provided by NASA MCP. Use any and all tools to help users. - When asked for the astronomy picture of the day, PASS in NO date to the API. - This ensures we get the latest picture available. If as specific date is asked for, you - can pass in that date to the API. + You have access to tools to search the Rijksmuseum collection. + Offer, for example, to show the earliest Rembrandt work from the museum. Use the `search_artwork` tool. + The tool may respond with a JSON object with an `artworks` array. Choose the art from that array. + Once the tool has responded, tell the user the title and use the `open_image_in_browser` tool. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way. Don't overexplain what you are doing. @@ -206,14 +209,13 @@ async def bot(runner_args: RunnerArguments): if __name__ == "__main__": - if not os.getenv("NASA_API_KEY"): + if not os.getenv("RIJKSMUSEUM_API_KEY"): logger.error( - f"Please set NASA_API_KEY environment variable for this example. See https://api.nasa.gov" + f"Please set RIJKSMUSEUM_API_KEY environment variable for this example. See https://github.com/r-huijts/rijksmuseum-mcp and https://www.rijksmuseum.nl/en/register?redirectUrl=https://www.https://www.rijksmuseum.nl/en/rijksstudio/my/profile" ) import sys sys.exit(1) - from pipecat.runner.run import main main()