Create a report run
Open Intel Agent, configure the report, and complete plan approval.
Connect ChatGPT, Claude, or your own software to shortlist trials, classify eligibility, retrieve approved profiles and documents, and extract structured variables.
Every MCP workflow begins with an approved report run created in Intel Agent. The first tool call turns that run into a 60-minute analysis lease; every later call uses the returned analysis_id.
The MCP endpoint currently accepts only TrialAgents-issued private service credentials. ChatGPT and Claude require a public OAuth flow before customers can connect safely. The platform steps below are ready for that release; do not paste an internal service token into either product.
Open Intel Agent, configure the report, and complete plan approval.
Add the remote MCP URL and complete TrialAgents authorization when available.
Call start_analysis once with the app-created report_run_id.
Pass the returned analysis_id to every filter, profile, document, classification, or extraction call.
Select a client for its current setup path. ChatGPT and Claude use hosted connectors; software integrations use the standard MCP SDK over Streamable HTTP.
Custom MCP apps are managed through ChatGPT developer mode. Workspace permissions and plan availability apply.
https://mcp.trialagents.com/mcp
Use TrialAgents Intel. Start the approved report run RUN_ID, shortlist phase 2 solid-tumor oncology trials recruiting in Germany, and return the EU trial number, title, and sponsor for each match.
Claude supports public remote MCP servers as custom connectors across its web and desktop surfaces.
https://mcp.trialagents.com/mcp
Use TrialAgents Intel to start report run RUN_ID. Filter the approved trial profiles first, classify the shortlist against my criteria, then retrieve full profiles only for eligible trials.
Use a TrialAgents-issued bearer credential with the official Python MCP SDK. Never commit the credential or send it to a browser.
python -m pip install "mcp>=2,<3"
import asyncio
import os
import httpx2
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
MCP_URL = "https://mcp.trialagents.com/mcp"
async def main():
headers = {
"Authorization": f"Bearer {os.environ['TRIALAGENTS_ACCESS_TOKEN']}"
}
async with httpx2.AsyncClient(headers=headers) as http:
async with streamable_http_client(MCP_URL, http_client=http) as streams:
read_stream, write_stream = streams
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
result = await session.call_tool(
"start_analysis",
{"report_run_id": "run_..."},
)
print(result.structured_content)
asyncio.run(main())
Start with deterministic filtering. Classify only a focused shortlist, retrieve full profiles only for selected trials, and load document text only when the profile does not contain the answer.
start_analysis01Turns an approved report run into the active analysis ID used by every other tool.
One active 60-minute leasefilter_trials02Applies structured filters and returns only EU number, trial title, and sponsor—not document inventory.
Up to 100 results per pageclassify_trials03Sends each complete contact-redacted profile to Terra, then returns only eligible, ineligible, and uncertain ID buckets.
Up to 25 trials per callget_profiles04Returns selected approved profiles, including the six document-category arrays and their exact filenames.
Up to 10 trials per callget_documents05Uses an exact filename from the trial profile and returns extracted text in bounded continuation parts.
One document per callextract_variables05Sends one complete profile and its single profile-listed protocol to Terra, returning only the requested values.
Up to 20 variables per callget_profiles first and copy the exact name from available_extracted_documents before calling get_documents. Empty categories are returned as empty arrays.These are MCP tool arguments—not raw HTTP request bodies. Paste them into an MCP inspector, use them with session.call_tool(), or give the equivalent instruction to ChatGPT or Claude.
Use the report run created and approved in Intel Agent.
{
"report_run_id": "run_..."
}Different fields combine with AND. Page with offset if needed.
{
"analysis_id": "ana_...",
"filters": {
"therapeutic_areas": {
"operator": "contains_any",
"values": ["Solid Tumor Oncology"]
},
"phase": {"operator": "contains_any", "values": [2]},
"countries": [{
"country_codes": {"operator": "contains_any", "values": ["DE"]},
"recruitment_statuses": {
"operator": "contains_any",
"values": ["Authorised"]
}
}]
},
"limit": 20,
"offset": 0
}Use identical criteria across batches of no more than 25 trial IDs.
{
"analysis_id": "ana_...",
"trial_ids": ["2024-500001-00-00"],
"inclusion_criteria": [
"The trial includes adults with unresectable locally advanced disease"
],
"exclusion_criteria": [
"The trial is restricted to healthy volunteers"
]
}Retrieve full profiles for selected trials; inspect exact document names here.
{
"analysis_id": "ana_...",
"trial_ids": ["2024-500001-00-00"]
}Use an exact profile-listed filename. Follow next_part until it is null.
{
"analysis_id": "ana_...",
"trial_id": "2024-500001-00-00",
"document_name": "Clinical Trial Protocol v3",
"part": 1
}Prefer targeted typed extraction when you need facts rather than complete text.
{
"analysis_id": "ana_...",
"trial_id": "2024-500001-00-00",
"variables": [
{
"name": "planned_sample_size",
"instruction": "Return the planned randomized population.",
"value_type": "integer"
},
{
"name": "central_imaging_review",
"instruction": "Is central imaging review required?",
"value_type": "boolean"
}
]
}All clinical reads use current approved Trial Profiles. Filtering returns lean shortlist metadata; classification receives the complete contact-redacted profile but does not expose it in the result. Document text is retrieved only by an exact profile-listed filename.
Calls are scoped to a time-limited analysis and metered by the plan approved in Intel Agent. Exact retries are deduplicated where the tool contract allows it.