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
This commit is contained in:
vipyne
2025-11-03 14:53:28 -06:00
parent 5c1bd8cda2
commit ef88d6a2ea

View File

@@ -6,6 +6,7 @@
import asyncio import asyncio
import io import io
import json
import os import os
import re import re
import shutil import shutil
@@ -63,10 +64,12 @@ class UrlToImageProcessor(FrameProcessor):
await self.push_frame(frame, direction) await self.push_frame(frame, direction)
def extract_url(self, text: str): def extract_url(self, text: str):
pattern = r"!\[[^\]]*\]\((https?://[^)]+\.(png|jpg|jpeg|PNG|JPG|JPEG))\)" data = json.loads(text)
match = re.search(pattern, text) if "artObject" in data:
if match: return data["artObject"]["webImage"]["url"]
return match.group(1) if "artworks" in data and len(data["artworks"]):
return data["artworks"][0]["webImage"]["url"]
return None return None
async def run_image_process(self, image_url: str): async def run_image_process(self, image_url: str):
@@ -130,9 +133,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
mcp = MCPClient( mcp = MCPClient(
server_params=StdioServerParameters( server_params=StdioServerParameters(
command=shutil.which("npx"), command=shutil.which("npx"),
args=["-y", "@programcomputer/nasa-mcp-server@latest"], # https://github.com/r-huijts/rijksmuseum-mcp
# https://api.nasa.gov args=["-y", "mcp-server-rijksmuseum"],
env={"NASA_API_KEY": os.getenv("NASA_API_KEY")}, env={"RIJKSMUSEUM_API_KEY": os.getenv("RIJKSMUSEUM_API_KEY")},
) )
) )
except Exception as e: except Exception as e:
@@ -146,10 +149,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
system = f""" system = f"""
You are a helpful LLM in a WebRTC call. You are a helpful LLM in a WebRTC call.
Your goal is to demonstrate your capabilities in a succinct way. 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. You have access to tools to search the Rijksmuseum collection.
When asked for the astronomy picture of the day, PASS in NO date to the API. Offer, for example, to show the earliest Rembrandt work from the museum. Use the `search_artwork` tool.
This ensures we get the latest picture available. If as specific date is asked for, you The tool may respond with a JSON object with an `artworks` array. Choose the art from that array.
can pass in that date to the API. 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. 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. Respond to what the user said in a creative and helpful way.
Don't overexplain what you are doing. Don't overexplain what you are doing.
@@ -206,14 +209,13 @@ async def bot(runner_args: RunnerArguments):
if __name__ == "__main__": if __name__ == "__main__":
if not os.getenv("NASA_API_KEY"): if not os.getenv("RIJKSMUSEUM_API_KEY"):
logger.error( 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 import sys
sys.exit(1) sys.exit(1)
from pipecat.runner.run import main from pipecat.runner.run import main
main() main()