Skip to main content
Glama
zkorczyc

hcp-engagement

by zkorczyc

HCP Engagement × Supabase × MCP (mock pharma demo)

Model Context Protocol server for simulated Healthcare Professional (HCP) engagement data — reps, visits/calls/emails, consent status, and prescribing trends — from Supabase.

All data is synthetic (example-pharma.com reps, fictional drug names like Cardiozin, sequential NPIs). This is not real provider or prescribing data.

Shares the same Supabase project as the separate Frescopa MCP repo, but lives in its own table namespace (hcps, hcp_reps, hcp_products, hcp_interactions, hcp_interaction_products, hcp_prescribing_trends, hcp_consents) — no foreign keys, joins, or code shared between the two.

Mode

Use case

stdio (npm start)

Cursor, Claude Desktop on your Mac

HTTP (npm run start:http)

Adobe AI Assistant, any remote app — public URL

Repo layout

Path

Purpose

../supabase/migrations/20260831000000_hcp_engagement_init.sql

Tables, RLS (anon/authenticated read-only), seed data, views

src/index.ts

MCP stdio entry

src/http.ts

MCP HTTP entry (POST /mcp)

src/create-server.ts

Shared tools

.env.example

Env template

Related MCP server: Garmin Health MCP Server

Supabase setup

  1. SQL: Dashboard → SQL Editor → paste ../supabase/migrations/20260831000000_hcp_engagement_init.sqlRun. Safe to re-run (uses on conflict do nothing / create or replace view).

  2. API: reuse the same SUPABASE_URL and SUPABASE_ANON_KEY from the Frescopa .env — same project, read-only anon key.

Local build

cd /Users/zkorczyc/Projects/Frescopa/hcp-mcp
cp .env.example .env   # skip if .env already exists
npm install
npm run build

Cursor mcp.json snippet

{
  "mcpServers": {
    "hcp-engagement": {
      "command": "node",
      "args": ["/Users/zkorczyc/Projects/Frescopa/hcp-mcp/dist/index.js"],
      "env": {
        "SUPABASE_URL": "https://uxlccvzhuwzwzrmqunml.supabase.co",
        "SUPABASE_ANON_KEY": "eyJ..."
      }
    }
  }
}

MCP tools

Tool

Role

hcp_list_hcps

List HCPs; filter specialty, tier (A|B|C), region, state

hcp_search

Search HCPs by name, NPI, or institution

hcp_get_profile

Full profile by NPI — demographics, consent status per channel, engagement summary

hcp_list_interactions

Visits/calls/emails — filter by NPI, region, specialty, rep name, interaction type, days back

hcp_engagement_summary

Analytics: interaction counts, recency, sentiment score, samples per HCP — find engagement gaps

hcp_prescribing_trends

Monthly new/total Rx and market share % for one HCP, optionally scoped to one product

hcp_prescribing_trend_by_segment

Analytics: quarterly Rx trend for one product, broken out by region/specialty (segment_rollup) plus per-HCP quarterly rows (hcp_quarterly) for drill-down

hcp_visit_frequency_by_segment

Analytics: quarterly interaction/visit frequency by region/specialty — pairs with hcp_prescribing_trend_by_segment for side-by-side comparison

hcp_rep_activity

Analytics: per-rep territory summary — HCPs engaged, interaction volume (30d/90d), avg sentiment

Example questions this enables

  • "Which Tier A cardiologists haven't been visited in 90+ days?" → hcp_engagement_summary (filter tier: A, specialty: Cardiology), then check last_interaction_at.

  • "Can I drop samples with Dr. Reyes?" → hcp_get_profile → check consents for sample_drop.

  • "Summarize my last 3 interactions with Dr. Nguyen." → hcp_list_interactions (filter by npi).

  • "Which reps have the most positive-sentiment interactions?" → hcp_rep_activity.

Demo narrative: "declining Rx despite steady engagement" (coverage-problem hook)

A 4-step chain that ties prescribing trend + rep engagement together to surface a "clinical demand exists, something's blocking it" story — useful for framing a payer/access-coverage narrative rather than a pure sales-execution one:

  1. Baseline, side by side — "Show me Oncovarin prescribing trends by region and specialty over the last 2 quarters, alongside HCP visit frequency for each region." → hcp_prescribing_trend_by_segment (brand_name: Oncovarin) + hcp_visit_frequency_by_segment, both grouped by region/specialty/quarter so they line up.

  2. Isolate the signal — "Which regions/specialties show declining Oncovarin prescribing despite stable or increasing visit frequency?" → compare the two segment_rollup outputs quarter-over-quarter (reasoning step, no new tool needed).

  3. Rule out physician sentiment — "For HCPs in [flagged region] with declining trends, what's the interaction sentiment from recent visits?" → hcp_prescribing_trend_by_segment's hcp_quarterly (filtered to the flagged region) to find the specific decliners, then hcp_list_interactions (filter by npi, or by region+specialty) to check sentiment.

  4. Territory context — "Summarize rep/territory performance in [flagged region] this quarter." → hcp_rep_activity (filter region).

The seed data has one segment deliberately built to produce this exact pattern: South region, Oncology, Oncovarin — prescribing drops sharply in the latest quarter while visit frequency stays comparatively steady and sentiment trends more positive, not less. Everything else in the dataset is pseudo-random (deterministic per NPI, but not hand-tuned), so other region/specialty combinations may or may not show a similar pattern.

Remote MCP URL (HTTP)

Same pattern as Frescopa — see ../README.md for the full walkthrough (build → start:http → deploy → register URL). This server defaults to port 3100 (vs. Frescopa's 3000) so both can run locally at once.

Security

  • Do not commit .env or service role keys.

  • Demo is safe with anon + RLS limited to SELECT.

  • Data is synthetic — do not populate with real patient, prescriber, or PHI/PII data.

  • HTTP: always set MCP_API_KEY on public deploy.

Available Tools

9 tools
hcp_engagement_summaryA

Analytics: total interactions, recency, sentiment score, and samples per HCP. Sorted by most interactions first. Useful for finding engagement gaps (e.g. Tier A HCPs with no recent contact).

ParametersJSON Schema
NameRequiredDescriptionDefault
tierNo
limitNo
regionNo
specialtyNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses useful behavioral traits: sorted by most interactions first and including samples per HCP. However, it omits important context such as whether the operation is read-only, the time window for recency/interactions, and how sentiment score is defined or scaled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler. The first sentence front-loads the core output and sort order; the second provides a concrete use case. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives a reasonable outline of the result fields and ordering, but no output schema exists and annotations are absent so more weight falls on the description. It fails to clarify the meaning of 'samples', the recency window, sentiment scoring, or how the optional filters interact with each other and with the limit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and there are 4 parameters: tier, limit, region, and specialty. The description only indirectly references tier via the 'Tier A HCPs' example and says nothing about limit, region, specialty, their defaults, or filter behavior, so the agent must infer most parameter meaning from names and enum values alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly identifies the resource (HCP engagement analytics) and specific metrics: total interactions, recency, sentiment score, and samples per HCP. Although it lacks an explicit action verb like 'returns' or 'computes', the metric list and sorting behavior sufficiently distinguish it from sibling tools such as hcp_list_interactions and hcp_visit_frequency_by_segment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states a clear use case: finding engagement gaps, with a concrete example (Tier A HCPs with no recent contact). It does not explicitly mention when not to use it or name alternatives, but the use case provides enough context for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hcp_get_profileA

Full profile for one HCP by NPI: demographics, consent status per channel, and engagement summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
npiYes10-digit NPI, e.g. 1000000001

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It discloses the scope and return content but does not mention access requirements, sensitivity of consent data, behavior for invalid/unknown NPI, or whether the response could be large. For a read operation, the lack of side-effect disclosure is acceptable, but more would strengthen transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence that front-loads the core action and scope, then lists the returned content categories without repetition. No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter retrieval tool, the description is largely complete: it names the key input and the high-level return categories. It does not describe failure modes or permissions, but the low complexity and clear single parameter make the tool callable with confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for the single parameter, including the 10-digit format and an example. The description only restates the NPI-based lookup, so it adds little semantic value beyond the schema. Baseline 3 is appropriate for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb+resource ('Full profile for one HCP') and identifies the key input (NPI) and the main content areas (demographics, consent status per channel, engagement summary). This clearly separates it from sibling list/search/aggregate tools by emphasizing a single-HCP full-profile retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the usage context: call this when you have a specific NPI and need the complete profile for that HCP. It does not explicitly name alternatives such as hcp_search for finding an NPI or hcp_engagement_summary for engagement-only data, so there are no stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hcp_list_hcpsA

List Healthcare Professionals (HCPs). Filter by specialty, tier (A|B|C), region, or state. Mock data — not real providers.

ParametersJSON Schema
NameRequiredDescriptionDefault
tierNo
limitNo
stateNoTwo-letter state code, e.g. NY
regionNo
specialtyNoe.g. Cardiology, Oncology, Primary Care

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description is the only safety/behavior source. It does add the important trait that the data are mock and not real providers, and 'List' implies a read-only operation, but it does not mention pagination, ordering, or output shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences cover the operation, filters, and the mock-data warning with no filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is adequate for a simple list tool, especially with the mock-data warning and schema-enforced filter constraints. It is not complete: without an output schema or annotations, it leaves out return-field and pagination details, and any differentiation from hcp_search.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description must compensate. It names four filter parameters and spells out tier values (A|B|C), but it does not explain the limit parameter or clarify whether the listed filters combine or are mutually exclusive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the operation ('List') and resource ('Healthcare Professionals (HCPs)'), and lists the main filter dimensions. It does not explicitly distinguish this from the sibling hcp_search, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The filter list gives a clear implied use case—obtain a filtered collection of HCPs—but no alternative tools are named and there is no when-not-to-use guidance. Since hcp_search exists as a sibling, the description leaves some selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hcp_list_interactionsA

List rep-HCP interactions (visits, calls, emails). Filter by HCP NPI, region, specialty, rep name, interaction type, or how many days back.

ParametersJSON Schema
NameRequiredDescriptionDefault
npiNoFilter to one HCP by NPI
limitNo
regionNo
rep_nameNoPartial match on rep name
specialtyNoe.g. Cardiology, Oncology
since_daysNo
interaction_typeNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It clearly signals a read-only list operation and enumerates filter dimensions, but it does not disclose output shape, ordering, how filters combine, or default limiting behavior beyond what the schema exposes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with the action and resource front-loaded, followed by a compact list of filters. Every clause adds useful information and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with seven optional parameters and no output schema, the description covers core intent and filter vocabulary but omits output format, pagination/limit behavior, and filter-combination semantics. It is minimally adequate for invoking the tool correctly, with clear gaps left to schema defaults and agent inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 43%, but the description adds practical meaning to several otherwise undocumented parameters: it identifies region, interaction_type, and since_days ('how many days back') as filters. The limit parameter remains undocumented in both the description and the schema's prose, though its default and bounds are present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb 'List' and names the resource 'rep-HCP interactions', explicitly enumerating interaction types (visits, calls, emails). This makes it immediately distinct from siblings like hcp_list_hcps, which lists HCPs, and hcp_engagement_summary, which suggests an aggregate view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when raw interaction records are needed and lists the available filters, but it gives no explicit when-to-use vs. alternatives guidance. An agent must infer from sibling names that summary/aggregate tools are more appropriate for engagement totals or trends.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hcp_prescribing_trend_by_segmentA

Quarterly prescribing trend for one product, broken out by region and specialty (segment_rollup), plus per-HCP quarterly rows (hcp_quarterly) for drill-down into which specific HCPs are declining/growing. Use segment_rollup to compare regions/specialties side by side; use hcp_quarterly to find individual decliners within a flagged segment.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNo
specialtyNoe.g. Oncology
brand_nameYese.g. Oncovarin
quarters_backNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses the key behavioral output: two data categories, segment_rollup and hcp_quarterly, and that the tool can identify declining/growing HCPs. It could add notes on data availability or limitations, but for a read-only reporting tool the main behavior is clearly communicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence front-loads the core function and output structure, and the second provides actionable guidance. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description names both output groups and maps them to use cases, which is the essential contextual information. It is slightly light on edge-case behavior such as no-data results or how quarters_back affects the returned rows, but the core usage is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds context matching brand_name, region, and specialty, and the word 'Quarterly' hints at quarters_back. However, it does not explicitly explain quarters_back semantics or the meaning of the region values; with schema coverage at 50%, the description only partially compensates for the undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes a quarterly prescribing trend for one product, broken out by region and specialty, with per-HCP drill-down rows. This is a specific, identifiable purpose. It does not explicitly distinguish itself from the similarly named sibling hcp_prescribing_trends, so it stops just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit within-tool usage guidance: use segment_rollup for side-by-side region/specialty comparison and hcp_quarterly to find declining/growing HCPs. This is clear analytical context. However, it does not state when to choose this tool over sibling alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hcp_rep_activityB

Per-rep territory summary: HCPs engaged, total interactions, interactions in last 30 days, average sentiment.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNo
rep_nameNoPartial match on rep name

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal the scope (per-rep territory), the aggregation level, and the 30-day window for a subset of metrics. It does not disclose how optional filters affect results, what 'engaged' means, whether results are grouped or sorted, or what the output shape is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence with a colon-delimited metric list. Every word contributes to the tool's purpose, and the content is front-loaded with the summary concept before the metrics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The metric list is useful and the tool is relatively simple, but the absence of an output schema, annotations, and any mention of filter behavior leaves gaps. Given the number of sibling tools, an agent could still be uncertain how this differs from hcp_engagement_summary or whether no parameters returns an aggregate territory rollup or a per-rep list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, and the description adds no parameter-level meaning. It does not mention that region filters by territory or that rep_name is a partial match, leaving the agent to depend entirely on the schema. The description names metrics but not how the two parameters constrain or aggregate them, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a per-rep territory summary and lists the exact metrics returned: HCPs engaged, total interactions, interactions in the last 30 days, and average sentiment. Although it uses a noun phrase rather than a verb, it conveys the resource and scope well. It does not explicitly differentiate itself from sibling tools like hcp_engagement_summary, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: an agent can infer this tool is for rep-level activity summaries. However, the description provides no guidance about when to choose this over hcp_engagement_summary, hcp_list_interactions, or other siblings. There are no exclusions, prerequisites, or alternative tool mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hcp_visit_frequency_by_segmentB

Quarterly rep interaction/visit frequency broken out by region and specialty — meant to be compared side by side with hcp_prescribing_trend_by_segment's segment_rollup for the same quarters.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNo
specialtyNoe.g. Oncology
quarters_backNo
interaction_typeNoOmit to count all interaction types

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It does state the core behavior: quarterly frequency computed and grouped by region and specialty, and it hints at join compatibility through the segment_rollup reference. It does not disclose output shape, how optional filters affect results, or how quarters_back is applied, but the primary behavior is still clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. The first clause states the primary output and grouping, and the second clause provides a useful comparison target. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no annotations, no output schema, four parameters, and sits among eight related HCP tools. The description provides one sibling comparison but omits important context such as default behavior when optional parameters are omitted, expected result structure, and how it differs from hcp_engagement_summary or hcp_list_interactions. More context is needed for an agent to reliably invoke and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning by indicating that region and specialty are grouping dimensions and that time is measured in quarters. However, it adds no additional semantics for quarters_back or interaction_type beyond what the schema already provides, and with 50% schema coverage the missing parameter explanations are only partially compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool produces quarterly interaction/visit frequency data broken out by region and specialty, so an agent can infer the resource and aggregation. It also references the sibling hcp_prescribing_trend_by_segment, adding context for comparison. It lacks a direct verb like 'returns' or 'aggregates', but the metric and segmentation are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete intended use case: compare side by side with hcp_prescribing_trend_by_segment's segment_rollup for the same quarters. However, it does not explain when to prefer this over related siblings such as hcp_engagement_summary, hcp_list_interactions, or hcp_rep_activity, nor does it provide exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.8/5.0
Disambiguation4/5

Most tools target distinct resources or views: search/list/get HCPs, raw interactions, rep summaries, engagement analytics, and prescribing trends. The overlaps between hcp_list_hcps and hcp_search, and between the segment rollup tools, are manageable because descriptions specify different filters and metrics.

Naming Consistency4/5

All tools share a consistent hcp_ prefix and descriptive names. However, the set mixes verb-led names like hcp_list_hcps and hcp_get_profile with noun-phrase names like hcp_rep_activity and hcp_engagement_summary, so the pattern is not perfectly uniform.

Tool Count5/5

Nine tools is well-scoped for an HCP engagement analytics domain. Each tool covers a meaningful capability, from individual HCP lookup and interaction history to rep-level activity and segment-level prescribing trends, without unnecessary redundancy.

Completeness4/5

The tool set covers the core read-only engagement workflow: finding HCPs, viewing profiles, inspecting interactions, and aggregating engagement and prescribing trends at both individual and segment levels. Minor gaps exist, such as no dedicated rep directory or HCP/consent update capability, but agents can work around these with existing tools.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables querying Garmin health data stored in Supabase through natural language, providing access to VO2 max trends, activity breakdowns, sleep statistics, race predictions, heart rate zones, and training load metrics.
    7
  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects to a Gym Tracker Supabase database to provide LLMs with access to personal workout history, routines, and training progress. It enables users to analyze fitness performance, track personal records, and receive personalized coaching advice through natural language.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zkorczyc/hcp-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server