Skip to content

Commit a3bd254

Browse files
authored
feat(mcp): set $mcp_interface on mcp analytics events (#1032)
feat(mcp): add interface property to server events Generated-By: PostHog Desktop Task-Id: 651bf7d9-01f4-4d75-8583-868e29fdd314
1 parent 509c852 commit a3bd254

5 files changed

Lines changed: 14 additions & 2 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
pypi/posthog: patch
3+
---
4+
5+
Set `$mcp_interface` to `mcp` on events from MCP servers.

‎posthog/mcp/_posthog_events.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,10 @@ def build_posthog_capture_events(
5959

6060

6161
def _build_capture_event(event: Event) -> PostHogCaptureEvent:
62-
properties: Dict[str, Any] = {_P.SOURCE: POSTHOG_MCP_ANALYTICS_SOURCE}
62+
properties: Dict[str, Any] = {
63+
_P.INTERFACE: "mcp",
64+
_P.SOURCE: POSTHOG_MCP_ANALYTICS_SOURCE,
65+
}
6366
_add_session_id(event, properties)
6467
_add_conversation_id(event, properties)
6568
_add_person_processing(event, properties)
@@ -260,7 +263,7 @@ def _add_server_build(event: Event, properties: Dict[str, Any]) -> None:
260263

261264

262265
def _build_exception_event(event: Event) -> PostHogCaptureEvent:
263-
properties: Dict[str, Any] = {}
266+
properties: Dict[str, Any] = {_P.INTERFACE: "mcp"}
264267
_add_session_id(event, properties)
265268
_add_conversation_id(event, properties)
266269
_add_person_processing(event, properties)

‎posthog/mcp/constants.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class PostHogMCPAnalyticsProperty:
8484
FEEDBACK_TASK_COMPLETED = "$mcp_feedback_task_completed"
8585
FEEDBACK_TOOL = "$mcp_feedback_tool"
8686
FEEDBACK_TYPE = "$mcp_feedback_type"
87+
INTERFACE = "$mcp_interface"
8788
IS_ERROR = "$mcp_is_error"
8889
INTENT = "$mcp_intent"
8990
INTENT_SOURCE = "$mcp_intent_source"

‎posthog/test/mcp/test_pipeline.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,7 @@ def test_build_tool_call_event_properties():
885885
props = capture["properties"]
886886
assert capture["event"] == PostHogMCPAnalyticsEvent.TOOL_CALL
887887
assert capture["distinct_id"] == "ses_abc"
888+
assert props[PostHogMCPAnalyticsProperty.INTERFACE] == "mcp"
888889
assert props[PostHogMCPAnalyticsProperty.SOURCE] == POSTHOG_MCP_ANALYTICS_SOURCE
889890
assert props[PostHogMCPAnalyticsProperty.TOOL_NAME] == "search_events"
890891
assert props[PostHogMCPAnalyticsProperty.TOOL_CATEGORY] == "Logs"
@@ -912,6 +913,7 @@ def test_protocol_version_on_primary_and_exception_events():
912913
# Both the primary $mcp_tool_call and the $exception sibling carry it.
913914
assert len(captures) == 2
914915
for capture in captures:
916+
assert capture["properties"][PostHogMCPAnalyticsProperty.INTERFACE] == "mcp"
915917
assert (
916918
capture["properties"][PostHogMCPAnalyticsProperty.PROTOCOL_VERSION]
917919
== "2025-06-18"

‎references/public_api_snapshot.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,7 @@ attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.INPUT_ALIASES_USED =
922922
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.INPUT_KEYS = '$mcp_input_keys'
923923
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.INTENT = '$mcp_intent'
924924
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.INTENT_SOURCE = '$mcp_intent_source'
925+
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.INTERFACE = '$mcp_interface'
925926
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.IS_ERROR = '$mcp_is_error'
926927
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.LISTED_TOOL_NAMES = '$mcp_listed_tool_names'
927928
attribute posthog.mcp.constants.PostHogMCPAnalyticsProperty.LLM_MODEL = '$mcp_llm_model'

0 commit comments

Comments
 (0)