> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Synapse MCP server

The Synapse MCP connector routes your AI agent's tool calls to Synapse's own MCP server through Scalekit. Each user signs in to Synapse once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 48 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Healthcare, Search, Files & Documents
**Tools:** 48: 48 read, 0 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=SYNAPSEMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Synapse MCP connection

   In **AgentKit > Connections**, create a Synapse MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Synapse MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'synapsemcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Synapse MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'synapsemcp_get_evaluation',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "synapsemcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Synapse MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="synapsemcp_get_evaluation",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'synapsemcp_check_synapse_id',
  toolInput: {
    syn_id: '<syn_id>',
  },
  connector: 'synapsemcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="synapsemcp_check_synapse_id",
    tool_input={
        "syn_id": "<syn_id>",
    },
    connection_name="synapsemcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `synapsemcp_check_synapse_id`

Validate Synapse ID · Read-only

Use this when the user has a string that looks like a Synapse ID (e.g. syn123456) and wants to check whether it exists in Synapse — verifies validity by querying the Synapse backend.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `syn_id` (`string`, required): The Synapse ID to validate (for example syn123456).

Example input: `{"syn_id":"<syn_id>"}`

### `synapsemcp_check_user_certified`

Check User Certified · Read-only

Use this when the user wants to know whether a Synapse user has passed the certification quiz required for uploading human data. User ID example: '1234567'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`integer`, required): The numeric Synapse user ID.

Example input: `{"user_id":1}`

### `synapsemcp_get_curation_task`

Get Curation Task · Read-only

Use this when the user wants the details of a single Synapse curation task by its numeric task ID. Task ID example: 42.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): The numeric Synapse curation task ID.

Example input: `{"task_id":1}`

### `synapsemcp_get_curation_task_resources`

Get Curation Task Resources · Read-only

Use this when the user wants the Synapse resources (RecordSets, Folders, EntityViews) linked to a curation task — the data the curator will act on. Task ID example: 42.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): The numeric Synapse curation task ID.

Example input: `{"task_id":1}`

### `synapsemcp_get_entity`

Fetch Entity · Read-only

Return Synapse entity metadata by ID (projects, folders, files, tables, etc.). Only retrieves metadata information - does not download file content.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID to fetch (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_acl`

Get Entity ACL · Read-only

Use this when the user wants the sharing settings or access control list (ACL) of one single Synapse entity — who can access it and with what permissions. Entity ID example: syn123456. Optionally filter to a single principal ID (user or team), e.g. '3379097'. Use list_entity_acl to audit ACLs across many entities under a container.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).
- `principal_id` (`integer`, optional): Optional user or team ID to filter to a single principal.

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_annotations`

Fetch Entity Annotations · Read-only

Return custom annotation key/value pairs for a Synapse entity.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID whose annotations to fetch (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_children`

List Entity Children · Read-only

List children for Synapse container entities (projects or folders).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse container entity ID (project or folder) whose children to list (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_permissions`

Get Entity Permissions · Read-only

Use this when the user wants to know what the currently authenticated user is allowed to do on a Synapse entity (READ, UPDATE, DELETE, etc.). Entity ID example: syn123456. Returns the caller's own permissions only — use get_entity_acl to see everyone's permissions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_provenance`

Fetch Entity Provenance · Read-only

Return provenance (activity) metadata for a Synapse entity, including inputs and code executed.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID whose provenance to fetch (for example syn123456).
- `version` (`integer`, optional): Optional entity version number to scope the provenance to a specific version. Omit for the latest version.

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_schema`

Get Entity Schema · Read-only

Use this when the user wants to know which JSON schema (data model / validation contract) is bound to a Synapse entity. Entity ID example: syn123456. Returns the schema binding metadata, not the schema body — use get_json_schema_body for that.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_schema_derived_keys`

Get Entity Schema Derived Keys · Read-only

Use this when the user wants the annotation keys a bound JSON schema requires on a Synapse entity. Useful for knowing what metadata fields a schema is enforcing. Entity ID example: syn123456.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_schema_invalid_validations`

Get Entity Schema Invalid Validations · Read-only

Use this when the user wants the list of Synapse entities inside a Folder or Project that currently fail their bound JSON schema — the 'what's broken' view. Container entity ID example: syn123456.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_entity_schema_validation_statistics`

Get Entity Schema Validation Statistics · Read-only

Use this when the user wants an aggregate validation summary for a Synapse entity container (Folder or Project) with a bound JSON schema — how many child entities pass or fail validation. Entity ID example: syn123456.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_evaluation`

Get Evaluation · Read-only

Use this when the user wants a Synapse Evaluation queue — the challenge/competition queue that participants submit models or results to. Synonymous with 'challenge queue', 'leaderboard queue'. Evaluation ID example: '9600001'. Evaluation name example: 'DREAM Patient Data'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, optional): The Synapse Evaluation (challenge queue) ID.
- `evaluation_name` (`string`, optional): The exact name of the Synapse Evaluation queue.

Example input: `{}`

### `synapsemcp_get_evaluation_acl`

Get Evaluation ACL · Read-only

Use this when the user wants the resource-level access control list of a Synapse Evaluation queue (challenge queue) — which principals (users and teams) hold which access types on the queue. Use for queue-administration questions like "who can score submissions". Distinct from get_evaluation_permissions, which reports the caller's own effective permissions. Evaluation ID example: '9600001'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_get_evaluation_permissions`

Get Evaluation Permissions · Read-only

Use this when the user wants to know what the authenticated caller is allowed to do on a Synapse Evaluation queue (challenge queue) — submit, administer, etc. Returns the caller's own effective permission flags. Distinct from get_evaluation_acl, which lists the queue's full ACL across every principal. Evaluation ID example: '9600001'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_get_json_schema`

Get JSON Schema · Read-only

Use this when the user wants metadata about a specific Synapse JSON Schema (data model, validation contract). Organization name example: 'org.sagebionetworks'. Schema name example: 'myDataset-1.0.0'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_name` (`string`, required): The Synapse JSON Schema organization name.
- `schema_name` (`string`, required): The Synapse JSON Schema name.

Example input: `{"organization_name":"<organization_name>","schema_name":"<schema_name>"}`

### `synapsemcp_get_json_schema_body`

Get JSON Schema Body · Read-only

Use this when the user wants the raw JSON document of a Synapse JSON Schema — the actual data model / validation rules. Organization name example: 'org.sagebionetworks'. Schema name example: 'myDataset-1.0.0'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_name` (`string`, required): The Synapse JSON Schema organization name.
- `schema_name` (`string`, required): The Synapse JSON Schema name.
- `version` (`string`, optional): Optional version number. Omit for the latest.

Example input: `{"organization_name":"<organization_name>","schema_name":"<schema_name>"}`

### `synapsemcp_get_link`

Get Link · Read-only

Use this when the user has a Synapse Link entity (a shortcut that points at another entity) and wants either the Link's own metadata or the target it resolves to. Link entity ID example: syn123456. Set follow_link=False to inspect the Link itself instead of its target.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).
- `follow_link` (`boolean`, optional): Whether to resolve the Link to its target entity (true) or return the Link's own metadata (false). Default: `true`.

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_get_schema_organization`

Get Schema Organization · Read-only

Use this when the user wants a Synapse JSON Schema Organization (namespace that owns a set of JSON schemas / data models) by name or numeric ID. Organization name example: 'org.sagebionetworks'. Organization ID example: 42.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_name` (`string`, required): The Synapse JSON Schema organization name.

Example input: `{"organization_name":"<organization_name>"}`

### `synapsemcp_get_schema_organization_acl`

Get Schema Organization ACL · Read-only

Use this when the user wants the ACL of a Synapse JSON Schema Organization — who may publish schemas under that namespace. Organization name example: 'org.sagebionetworks'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_name` (`string`, required): The Synapse JSON Schema organization name.

Example input: `{"organization_name":"<organization_name>"}`

### `synapsemcp_get_submission`

Get Submission · Read-only

Use this when the user wants a specific Synapse submission — a challenge entry a participant sent to an Evaluation queue. Submission ID example: '9722233'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `submission_id` (`string`, required): The Synapse submission ID.

Example input: `{"submission_id":"<submission_id>"}`

### `synapsemcp_get_submission_count`

Get Submission Count · Read-only

Use this when the user wants only the count of Synapse submissions (challenge entries) in an Evaluation queue, not the submissions themselves. Evaluation ID example: '9600001'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_get_submission_status`

Get Submission Status · Read-only

Use this when the user wants the scoring status of a single Synapse submission (challenge entry) — e.g. RECEIVED, EVALUATION_IN_PROGRESS, SCORED. Submission ID example: '9722233'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `submission_id` (`string`, required): The Synapse submission ID.

Example input: `{"submission_id":"<submission_id>"}`

### `synapsemcp_get_team`

Get Team · Read-only

Use this when the user wants a Synapse team by its numeric ID or name. A Synapse team is a group of users (collaborators, members) that can be granted access to entities collectively. Team ID example: '3379097'. Team name example: 'NF-OSI Curators'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`integer`, optional): The numeric Synapse team ID.
- `team_name` (`string`, optional): The exact name of the Synapse team.

Example input: `{}`

### `synapsemcp_get_team_members`

Get Team Members · Read-only

Use this when the user wants the roster of a Synapse team — who is on it. Pages through the team membership API; pass an increased ``offset`` to fetch the next batch. Team ID example: '3379097'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`integer`, required): The numeric Synapse team ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.

Example input: `{"team_id":1}`

### `synapsemcp_get_team_membership_status`

Get Team Membership Status · Read-only

Use this when the user wants to know whether a specific Synapse user is already a member of, has applied to, or has been invited to a Synapse team. Team ID example: '3379097'. User ID example: '1234567'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`integer`, required): The numeric Synapse team ID.
- `user_id` (`integer`, required): The numeric Synapse user ID.

Example input: `{"team_id":1,"user_id":1}`

### `synapsemcp_get_team_open_invitations`

Get Team Open Invitations · Read-only

Use this when the user wants the pending (not yet accepted or rejected) invitations for a Synapse team. Pages through the open-invitation API; pass an increased ``offset`` to fetch the next batch. Team ID example: '3379097'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`integer`, required): The numeric Synapse team ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.

Example input: `{"team_id":1}`

### `synapsemcp_get_user_profile`

Get User Profile · Read-only

Use this when the user wants a Synapse user profile by numeric user ID or username, or the authenticated caller's own profile when called with no arguments. User ID example: '1234567'. Username example: 'janedoe'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`integer`, optional): The numeric Synapse user ID.
- `username` (`string`, optional): The Synapse username.

Example input: `{}`

### `synapsemcp_get_wiki_headers`

Get Wiki Headers · Read-only

Use this when the user wants the table of contents of a Synapse wiki — the list of pages and sub-pages attached to an entity. Owner entity ID example: syn123456. If the result hits the limit, call again with a higher offset to paginate.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `owner_id` (`string`, required): The Synapse entity ID that owns the wiki (for example syn123456).
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.

Example input: `{"owner_id":"<owner_id>"}`

### `synapsemcp_get_wiki_history`

Get Wiki History · Read-only

Use this when the user wants the revision history (edit log) of a specific Synapse wiki page — who changed it and when. Owner entity ID example: syn123456. Wiki ID example: '123456' (numeric wiki page id). Paginate via offset if needed.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `owner_id` (`string`, required): The Synapse entity ID that owns the wiki (for example syn123456).
- `wiki_id` (`string`, required): The numeric wiki page ID. Omit for the root wiki page.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.

Example input: `{"owner_id":"<owner_id>","wiki_id":"<wiki_id>"}`

### `synapsemcp_get_wiki_order_hint`

Get Wiki Order Hint · Read-only

Use this when the user wants to know the display order of sub-pages in a Synapse wiki — how the wiki navigation is sorted. Owner entity ID example: syn123456.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `owner_id` (`string`, required): The Synapse entity ID that owns the wiki (for example syn123456).

Example input: `{"owner_id":"<owner_id>"}`

### `synapsemcp_get_wiki_page`

Get Wiki Page · Read-only

Use this when the user wants to read a Synapse wiki page — its markdown content and metadata — attached to a project, folder, or file. A Synapse wiki is the markdown documentation surfaced on an entity. Owner entity ID example: syn123456. Omit wiki_id to get the root wiki page.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `owner_id` (`string`, required): The Synapse entity ID that owns the wiki (for example syn123456).
- `wiki_id` (`string`, optional): The numeric wiki page ID. Omit for the root wiki page.

Example input: `{"owner_id":"<owner_id>"}`

### `synapsemcp_list_curation_tasks`

List Curation Tasks · Read-only

Use this when the user wants every Synapse curation task in a project — the queue of data-curation work items attached to that project. Project entity ID example: syn123456.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): The Synapse project entity ID.

Example input: `{"project_id":"<project_id>"}`

### `synapsemcp_list_entity_acl`

List Entity ACL · Read-only

Use this when the user wants every ACL on a Synapse entity and, with recursive=True, on all its descendants — useful for auditing sharing recursively across a project subtree. Set include_container_content=True to include files and folders inside containers; recursive=True requires include_container_content=True and walks into child containers as well. Entity ID example: syn123456.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_id` (`string`, required): The Synapse entity ID (for example syn123456).
- `include_container_content` (`boolean`, optional): Whether to include files and folders inside containers. Default: `false`.
- `recursive` (`boolean`, optional): Whether to include ACLs of all descendant entities as well. Default: `false`.
- `target_entity_types` (`array`, optional): Filter to only these entity types.

Example input: `{"entity_id":"<entity_id>"}`

### `synapsemcp_list_evaluation_submission_bundles`

List Evaluation Submission Bundles · Read-only

Use this when the user wants Synapse submission plus scoring status together (as bundles) for an Evaluation queue — one call returns both sides. Pass an increased ``offset`` to fetch the next batch. Evaluation ID example: '9600001'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.
- `status` (`string`, optional): Filter results to this status value.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_list_evaluation_submissions`

List Evaluation Submissions · Read-only

Use this when the user wants ALL submissions (every challenge entry from every participant) sent to a Synapse Evaluation queue — optionally filtered by status (SCORED, INVALID, etc.). NOT just the caller's own — use list_my_submissions for that. Pages through the queue's submission list; pass an increased ``offset`` to fetch the next batch. Evaluation ID example: '9600001'. Returns raw Submission objects; use list_submission_statuses for status-only data and list_evaluation_submission_bundles for bundled submission+status pairs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.
- `status` (`string`, optional): Filter results to this status value.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_list_evaluations`

List Evaluations · Read-only

Use this when the user wants to enumerate Synapse Evaluation queues (challenges, competitions, leaderboards) — optionally filtered by project, access type, or active-only. Project ID example: syn123456. Paginate via offset.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `access_type` (`string`, optional): Filter to evaluations the caller has this access type on.
- `active_only` (`boolean`, optional): Only return currently active evaluations.
- `available_only` (`boolean`, optional): Only return evaluations the caller can currently submit to. Default: `false`.
- `evaluation_ids` (`array`, optional): Filter to this specific list of Evaluation IDs.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `20`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.
- `project_id` (`string`, optional): The Synapse project entity ID.

Example input: `{}`

### `synapsemcp_list_form_data`

List Form Data · Read-only

Use this when the user wants the form submissions for a Synapse FormGroup — a collection of structured-data forms submitted by users. Optionally filter by state (valid filter_by_state values: 'waiting_for_submission', 'submitted_waiting_for_review', 'accepted', 'rejected'). When as_reviewer=True the caller lists submissions they can review ('waiting_for_submission' is not allowed in this mode); when False (default) lists submissions the caller owns. Token-paginated: response includes ``next_page_token``; pass it back to fetch the next page (null on final page). Form group ID example: '42'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `group_id` (`string`, required): The Synapse FormGroup ID.
- `as_reviewer` (`boolean`, optional): List submissions the caller can review instead of submissions they own. Default: `false`.
- `filter_by_state` (`array`, optional): Filter to these submission states (e.g. accepted, rejected).
- `next_page_token` (`string`, optional): Pagination token returned by a previous call. Omit for the first page.

Example input: `{"group_id":"<group_id>"}`

### `synapsemcp_list_json_schema_versions`

List JSON Schema Versions · Read-only

Use this when the user wants every version published for a Synapse JSON Schema. Token-paginated like list_json_schemas: pass the returned ``next_page_token`` back to fetch the next page. Organization name example: 'org.sagebionetworks'. Schema name example: 'myDataset-1.0.0'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_name` (`string`, required): The Synapse JSON Schema organization name.
- `schema_name` (`string`, required): The Synapse JSON Schema name.
- `next_page_token` (`string`, optional): Pagination token returned by a previous call. Omit for the first page.

Example input: `{"organization_name":"<organization_name>","schema_name":"<schema_name>"}`

### `synapsemcp_list_json_schemas`

List JSON Schemas · Read-only

Use this when the user wants every Synapse JSON Schema (data model, validation contract) owned by an organization. Token-paginated (no limit/offset): the response includes ``next_page_token``; pass it back as the next call's ``next_page_token`` argument to fetch the following page. ``next_page_token`` is null on the final page. Organization name example: 'org.sagebionetworks'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_name` (`string`, required): The Synapse JSON Schema organization name.
- `next_page_token` (`string`, optional): Pagination token returned by a previous call. Omit for the first page.

Example input: `{"organization_name":"<organization_name>"}`

### `synapsemcp_list_my_submission_bundles`

List My Submission Bundles · Read-only

Use this when the user wants their own Synapse submission+status bundles for an Evaluation queue — one call returns both submission and scoring status for every entry they made. Pass an increased ``offset`` to fetch the next batch. Evaluation ID example: '9600001'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_list_my_submissions`

List My Submissions · Read-only

Use this when the user wants their own submissions (challenge entries) to a Synapse Evaluation queue. Pass an increased ``offset`` to page beyond the first batch. Evaluation ID example: '9600001'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `50`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_list_submission_statuses`

List Submission Statuses · Read-only

Use this when the user wants the scoring statuses of every Synapse submission in an Evaluation queue — optionally filtered (SCORED, INVALID, etc.). Evaluation ID example: '9600001'. Returns status records only; use list_evaluation_submissions for the submissions themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `evaluation_id` (`string`, required): The Synapse Evaluation (challenge queue) ID.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `10`.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.
- `status` (`string`, optional): Filter results to this status value.

Example input: `{"evaluation_id":"<evaluation_id>"}`

### `synapsemcp_search_entities_by_md5`

Search Entities By MD5 · Read-only

Use this when the user has an MD5 hash of a file and wants the Synapse entities (file entities) whose attached file has that exact MD5 — useful for deduplication and 'is this already in Synapse' checks. MD5 example: '9e107d9d372bb6826bd81d3542a419d6'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `md5` (`string`, required): The MD5 hash of the file content to search for.

Example input: `{"md5":"<md5>"}`

### `synapsemcp_search_entity_by_name`

Search Entity By Name · Read-only

Use this when the user has a file name or Synapse entity name (and optionally its parent folder or project) but does not know the Synapse ID — resolves an exact name to its Synapse ID. The name match is case-sensitive (e.g. 'Patient Record Set' will not match 'Patient record set'); use search_synapse for fuzzy or case-insensitive lookup. Parent entity ID example: syn123456. Name example: 'sample.csv'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, required): The exact entity name to resolve to a Synapse ID.
- `parent_id` (`string`, optional): Restrict to entities under this parent container ID.

Example input: `{"name":"<name>"}`

### `synapsemcp_search_synapse`

Search Synapse · Read-only

Search Synapse entities using keyword queries with optional name/type/parent filters. Results are served by Synapse as data custodian. Attribution and licensing are determined by the original contributors; check the specific entity's annotations or Wiki for details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `entity_type` (`string`, optional): Filter results to a single entity type (for example file, folder, project, table).
- `entity_types` (`array`, optional): Filter results to multiple entity types. Pass as a JSON array of strings via the SDK, not as a string.
- `limit` (`integer`, optional): Maximum number of results to return. Default: `20`.
- `name` (`string`, optional): Filter results to entities matching this exact name.
- `offset` (`integer`, optional): Number of results to skip, for pagination. Default: `0`.
- `parent_id` (`string`, optional): Restrict the search to entities under this parent container ID (for example syn123456).
- `query_term` (`string`, optional): Free-text keyword query to search Synapse entities.

Example input: `{}`

## Related

Other Healthcare & life sciences connectors ([all 4](/agentkit/connectors/?category=healthcare)):

- [Scite MCP server](/agentkit/connectors/scitemcp/): Vendor MCP, OAuth, 25 tools
- [AdvancedMD](/agentkit/connectors/advancedmd/): Scalekit connector, SMART on FHIR, 89 tools
- [SMART App on FHIR](/agentkit/connectors/customsmartfhir/): Scalekit connector, SMART on FHIR, 81 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
