HERE MCP app and supertab tools
These tools let an AI agent find, launch, and work with content in a user's Enterprise Browser (EB). Your agent can set up a workspace for the user (for example, a markets dashboard with a specific instrument already loaded) so the user doesn't have to locate it manually.
New to the MCP server? Start with the overview.
| Tool | Category | Purpose |
|---|---|---|
list-apps | Discover | List the apps the user can access |
list-supertabs | Discover | List the user's local and published supertabs |
launch-app | Launch | Open an app, with optional FDC3 context |
open-supertab | Launch | Open a local or published supertab, with optional FDC3 context |
create-supertab | Launch | Combine two or more apps in a new supertab with a row, column, or grid layout |
get-channel-contexts | Channels | Read the current context on every color channel |
get-channel-memberships | Channels | See which supertabs are on which color channel |
broadcast-context | Channels | Broadcast an FDC3 context to a color channel |
list-open-supertabs | Desktop state | List open windows, their supertabs, and the views in each |
get-focused-content | Desktop state | Find the window, supertab, and view the user is focused on |
To raise an FDC3 intent, including one aimed at a specific app, use raise-intent.
How the tools work
There are two kinds of tools:
- Server-side tools.
list-appsandlist-supertabsread from the HERE content directory. They work even if Enterprise Browser isn't running. - Desktop tools. All other tools act on the user's live Enterprise Browser session. The MCP server sends the request to the user's desktop and waits for a response, so you receive the result (or an error) before the call completes.
Security model
- Entitlements still apply. An agent can only see and open apps and supertabs the user has access to.
- The token decides the user. Tools always act for the subject (
sub) of the bearer token. They can't act for anyone else. - MCP launches behave like user launches. Content opened through the MCP server works the same as content the user opens directly.
- Usage is metered. Every tool call is recorded for your organization.
Prerequisites
- You can connect to the MCP server. See Connecting for the endpoint and authentication. Then call
tools/listto check which of these tools your organization has enabled. - Content is set up in the Admin Console. Apps and published supertabs need to be configured and assigned to users. See Manage apps and Manage supertabs.
- Apps have clear names and context types. Agents pick apps based on what
list-appsreturns: the app name and the context types it accepts. Vague names make it hard for an agent to choose the right app. - Enterprise Browser is running (for desktop tools). If it isn't, desktop tool calls time out. Requests aren't queued or retried.
Discover content
list-apps
Lists the apps in the content directory that the user can access.
Input
| Field | Type | Required | Description |
|---|---|---|---|
query | string | No | Search string to filter the results |
Output
Each app includes:
| Field | Description |
|---|---|
appId | ID to pass to launch-app or create-supertab |
name | App name |
description | App description. Admins can't currently set app descriptions in the Admin Console, so this field might be empty |
manifestType | Kind of app, such as a web app or a native desktop app |
| Context types | FDC3 context types the app accepts |
Example
const apps = await mcp.call("list-apps", { query: "chart" });
list-supertabs
Lists the user's supertabs from two sources:
- Saved: the user's local supertabs
- Published: supertabs that admins have published and assigned to the user
For more on the difference, see Local and published supertabs.
Input
| Field | Type | Required | Description |
|---|---|---|---|
source | "saved" | "published" | No | Only return supertabs from this source. Omit this field to return both |
Output
Each supertab includes:
| Field | Description |
|---|---|
id | ID to pass to open-supertab |
title | Supertab title |
source | saved or published. Pass it to open-supertab along with id |
Example
const supertabs = await mcp.call("list-supertabs", { source: "published" });
Launch content
All three launch tools take an optional FDC3 context object. If you include one, Enterprise Browser broadcasts it after the content opens, so the apps load with that context already applied. The context needs a type field. See Context objects for examples.
launch-app
Opens a web app or a native desktop app.
Input
| Field | Type | Required | Description |
|---|---|---|---|
appId | string | Yes | ID of the app, from list-apps |
context | object | No | FDC3 context to broadcast to the app's channel after it opens |
Output
| Field | Description |
|---|---|
success | true if the app opened |
windowId | ID of the window the app is in |
viewId | ID of the view the app opened in |
If the app fails to open, you receive an error.
Example
const result = await mcp.call("launch-app", {
appId: "chart-app",
context: { type: "fdc3.instrument", id: { ticker: "AAPL" } }
});
// → { success: true, windowId: "...", viewId: "..." }
open-supertab
Opens a saved (local) or published supertab.
Input
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | ID of the supertab, from list-supertabs |
source | "saved" | "published" | Yes | Where the supertab comes from, from list-supertabs |
context | object | No | FDC3 context to broadcast to the supertab's color channel after it opens |
Output
| Field | Description |
|---|---|
success | true if the supertab opened |
pageId | ID of the supertab |
windowId | ID of the window the supertab is in |
contextGroup | Color channel the supertab is on |
If the supertab fails to open, you receive an error.
Example
const result = await mcp.call("open-supertab", {
id: "markets-dashboard",
source: "published",
context: { type: "fdc3.instrument", id: { ticker: "AAPL" } }
});
create-supertab
Creates a new supertab containing two or more apps, arranged in the layout you specify.
Input
| Field | Type | Required | Description |
|---|---|---|---|
appIds | string[] | Yes | IDs of the apps to include, from list-apps. Requires at least two |
layout | "row" | "column" | "grid" | Yes | How to arrange the apps |
title | string | No | Title for the new supertab |
context | object | No | FDC3 context to broadcast to the new supertab's color channel, so every app in it gets the context |
Output
| Field | Description |
|---|---|
success | true if the supertab was created and opened |
pageId | ID of the new supertab |
windowId | ID of the window the supertab is in |
contextGroup | Color channel the supertab is on |
If the supertab can't be created, you receive an error.
Example
const result = await mcp.call("create-supertab", {
appIds: ["chart-app", "news-app", "research-app"],
layout: "grid",
title: "AAPL overview",
context: { type: "fdc3.instrument", id: { ticker: "AAPL" } }
});
Work with color channels
Color channels link top-level tabs so they share context. See Signals for how users work with color channels, and Add signals with context sharing for how apps receive context.
get-channel-contexts
Reads the current FDC3 context on each color channel. Takes no input.
Output
{
"channels": [
{
"id": "green",
"displayName": "Green",
"currentContext": { "type": "fdc3.instrument", "id": { "ticker": "AAPL" } }
}
]
}
get-channel-memberships
Shows which open supertabs are on each color channel. Takes no input.
Output
{
"memberships": [
{
"channelId": "green",
"pages": [
{ "pageId": "...", "title": "AAPL overview", "windowId": "..." }
]
}
]
}
To determine which channel a supertab is on, look for its pageId in the response. list-open-supertabs also returns each supertab's channel as contextGroup.
broadcast-context
Broadcasts an FDC3 context to a color channel. Every app on that channel receives it.
Input
| Field | Type | Required | Description |
|---|---|---|---|
channel | string | Yes | ID of the color channel, from get-channel-contexts |
context | object | Yes | FDC3 context object. Must include a type field |
Output
{ success: true } if the broadcast succeeds. If the channel doesn't exist, you receive an error.
Example
const result = await mcp.call("broadcast-context", {
channel: "green",
context: { type: "fdc3.instrument", id: { ticker: "MSFT" } }
});
Read desktop state
list-open-supertabs
Lists every open Enterprise Browser window, the supertabs in each one, and the views in each supertab. Takes no input.
Output
{
"windows": [
{
"windowId": "...",
"pages": [
{
"pageId": "...",
"title": "AAPL overview",
"isActive": true,
"contextGroup": "green",
"views": []
}
]
}
]
}
isActive marks the active supertab in each window. views lists the view tabs in the supertab.
get-focused-content
Returns what the user is focused on: the last focused window, the active supertab in it, and the focused view in that supertab. Takes no input.
Output
{
"windowId": "...",
"page": { "pageId": "...", "title": "AAPL overview", "contextGroup": "green" },
"view": { "viewId": "...", "title": "Chart", "url": "https://..." }
}
To read the text content of the user's views, use get-browser-context.
Common workflows
Open a dashboard with context. Call list-supertabs to find the dashboard. Then call open-supertab with its id, its source, and a context for the instrument the user asked about.
Build a custom workspace. Call list-apps and pick apps based on their names and context types. Then call create-supertab with those appIds, a layout, and a context.
Track the user's current activity. Call get-focused-content to get the focused supertab and its contextGroup. Then call get-channel-contexts to see what's on that channel, or broadcast-context to change it.
Limits
- No changes to existing content. You can't use these tools to modify or close supertabs or views that are already open.
- Live session required. Desktop tools act on the user's current Enterprise Browser session. If no session is active, the call times out.
- Current user only. Tools only act for the authenticated user.
Related tools
- HERE MCP server overview
- HERE MCP intent tools:
list-intent-handlersandraise-intent get-browser-context: read text and markdown from the user's open viewssend-notification: send the user a desktop notification