Merge pull request #3187 from pipecat-ai/vp-mcp-filter-followup
add mcp filter example and changelog
This commit is contained in:
1
changelog/3187.added.md
Normal file
1
changelog/3187.added.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
- Added optional tool and tool output filters for MCP services.
|
||||||
@@ -64,11 +64,14 @@ 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):
|
||||||
data = json.loads(text)
|
try:
|
||||||
if "artObject" in data:
|
data = json.loads(text)
|
||||||
return data["artObject"]["webImage"]["url"]
|
if "artObject" in data:
|
||||||
if "artworks" in data and len(data["artworks"]):
|
return data["artObject"]["webImage"]["url"]
|
||||||
return data["artworks"][0]["webImage"]["url"]
|
if "artworks" in data and len(data["artworks"]):
|
||||||
|
return data["artworks"][0]["webImage"]["url"]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -88,6 +91,23 @@ class UrlToImageProcessor(FrameProcessor):
|
|||||||
logger.error(error_msg)
|
logger.error(error_msg)
|
||||||
|
|
||||||
|
|
||||||
|
# full list of tools available from rijksmuseum MCP:
|
||||||
|
# - get_artwork_details
|
||||||
|
# - get_artwork_image
|
||||||
|
# - get_user_sets
|
||||||
|
# - get_user_set_details
|
||||||
|
# - open_image_in_browser
|
||||||
|
# - get_artist_timeline
|
||||||
|
|
||||||
|
mcp_tools_filter = ["get_artwork_details", "get_artwork_image", "open_image_in_browser"]
|
||||||
|
|
||||||
|
|
||||||
|
def open_image_output_filter(output: str):
|
||||||
|
pattern = r"Successfully opened image in browser: "
|
||||||
|
text_to_print = re.sub(pattern, "", output)
|
||||||
|
print(f"🖼️ link to high resolution artwork: {text_to_print}")
|
||||||
|
|
||||||
|
|
||||||
# We store functions so objects (e.g. SileroVADAnalyzer) don't get
|
# We store functions so objects (e.g. SileroVADAnalyzer) don't get
|
||||||
# instantiated. The function will be called when the desired transport gets
|
# instantiated. The function will be called when the desired transport gets
|
||||||
# selected.
|
# selected.
|
||||||
@@ -136,7 +156,10 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
# https://github.com/r-huijts/rijksmuseum-mcp
|
# https://github.com/r-huijts/rijksmuseum-mcp
|
||||||
args=["-y", "mcp-server-rijksmuseum"],
|
args=["-y", "mcp-server-rijksmuseum"],
|
||||||
env={"RIJKSMUSEUM_API_KEY": os.getenv("RIJKSMUSEUM_API_KEY")},
|
env={"RIJKSMUSEUM_API_KEY": os.getenv("RIJKSMUSEUM_API_KEY")},
|
||||||
)
|
),
|
||||||
|
# Optional
|
||||||
|
tools_filter=mcp_tools_filter, # Optional
|
||||||
|
tools_output_filters={"open_image_in_browser": open_image_output_filter},
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"error setting up mcp")
|
logger.error(f"error setting up mcp")
|
||||||
|
|||||||
@@ -67,13 +67,14 @@ 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):
|
||||||
data = json.loads(text)
|
try:
|
||||||
if "artObject" in data:
|
data = json.loads(text)
|
||||||
return data["artObject"]["webImage"]["url"]
|
if "artObject" in data:
|
||||||
if "artworks" in data and len(data["artworks"]):
|
return data["artObject"]["webImage"]["url"]
|
||||||
return data["artworks"][0]["webImage"]["url"]
|
if "artworks" in data and len(data["artworks"]):
|
||||||
|
return data["artworks"][0]["webImage"]["url"]
|
||||||
return None
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
async def run_image_process(self, image_url: str):
|
async def run_image_process(self, image_url: str):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user