Run AI agents in Zulip as @mentionable bots — or wire into any MCP client.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · sse counts 27 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_reaction
-
edit_message
-
end_session
-
fetch_file
-
fetch_image
-
get_message_by_id
-
get_message_link
-
get_messages
-
get_stream_members
-
get_stream_topics
-
get_subscribed_streams
-
get_user_info
-
list_emoji
-
list_streams
-
listen
-
move_messages
-
remove_reaction
-
reply
-
resolve_name
-
resolve_topic
-
send_direct_message
-
send_message
-
set_context
-
stop_typing
-
typing
-
upload_file
-
verify_message
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 2ac06bd · analyzer v33 · 3d ago
skills & prompt files 1
- agent-rules windborne-zulipmcp-2ac06bd/CLAUDE.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 15
filesystem 9
- fs windborne-zulipmcp-2ac06bd/hermes_plugin/zulip/adapter.py :18
from pathlib import Path - fs (weak) windborne-zulipmcp-2ac06bd/tests/test_hermes_gateway.py :9
from pathlib import Path - fs (weak) windborne-zulipmcp-2ac06bd/tests/test_launch_agent.py :6
from pathlib import Path - fs (weak) windborne-zulipmcp-2ac06bd/tests/test_listen_interrupt.py :8
from pathlib import Path - fs windborne-zulipmcp-2ac06bd/zulipmcp/agent_backends.py :9
from pathlib import Path - fs windborne-zulipmcp-2ac06bd/zulipmcp/core.py :7
from pathlib import Path - fs windborne-zulipmcp-2ac06bd/zulipmcp/launch_agent.py :10
from pathlib import Path - fs windborne-zulipmcp-2ac06bd/zulipmcp/listener.py :19
from pathlib import Path - fs windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :23
from pathlib import Path
shell / exec 1
- shell windborne-zulipmcp-2ac06bd/zulipmcp/listener.py :14
import subprocess
network 2
- net windborne-zulipmcp-2ac06bd/hermes_plugin/zulip/adapter.py :21
import requests - net windborne-zulipmcp-2ac06bd/zulipmcp/core.py :6
import urllib.parse
tool registrations 27
- set_context windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :354
- reply windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :394
- listen windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :499
- end_session windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :690
- list_streams windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :775
- get_stream_topics windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :804
- get_stream_members windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :827
- get_messages windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :849
- get_message_by_id windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :901
- get_message_link windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :919
- verify_message windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :946
- send_message windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :987
- send_direct_message windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1009
- add_reaction windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1030
- remove_reaction windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1044
- edit_message windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1063
- move_messages windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1086
- resolve_topic windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1131
- list_emoji windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1165
- typing windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1184
- stop_typing windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1203
- get_user_info windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1226
- resolve_name windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1266
- get_subscribed_streams windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1287
- fetch_image windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1304
- fetch_file windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1318
- upload_file windborne-zulipmcp-2ac06bd/zulipmcp/mcp.py :1333
declared dependencies 3
- fastmcp@*
- diskcache@*
- zulip@*