Skip to main content

HERE MCP intent tools

The intent tools let an agent raise FDC3 intents on the user's desktop.

ToolPurpose
list-intent-handlersFind the FDC3 intents available and the apps that handle them
raise-intentRaise an FDC3 intent in the user's running Enterprise Browser

New to the MCP server? Start with the overview.

Without intents, when your agent identifies a relevant instrument, trade, or counterparty, it can only notify the user, who must then locate and open the appropriate app. Intent tools let your agent open the app directly.

What happens when you raise an intent​

Raise-intent call path from agent through HERE MCP, cloud interop, MQTT, and Enterprise Browser to the target application

The call is synchronous. Your agent gets the outcome before the call returns, so it can accurately report the result to the user.

Security model​

Every intent runs inside the authenticated user's Enterprise Browser (EB) session:

  • Only apps in your HERE App Directory can be targets.
  • Entitlements and access policies still apply. Your agent can't access an app the user doesn't have access to.
  • Intents always go to the subject (sub) of the bearer token. You can't send an intent to another user.
  • Every call is logged. See Auditing and analytics.

Prerequisites​

  1. cloudInterop is enabled for your HERE organization. HERE enables this organization-level feature flag for you.
  2. You can connect to the MCP server. See Connecting for the endpoint and authentication. Then call tools/list to check that the intent tools are available.
  3. Apps declare their intents. Each app you want to target needs its intents listed in Interop Settings in the Admin Console (see Manage apps). If an app doesn't declare any intents, list-intent-handlers won't show it and raise-intent can't reach it.
  4. Enterprise Browser is running. Intents go to a live desktop session. If EB isn't running, the call times out. Nothing is queued or replayed.

list-intent-handlers​

Lists the intents in your App Directory, grouped by intent and filtered to what the user can access.

Call this before raise-intent, either when your agent starts or as needed. Hard-coded intent names and app IDs break when an admin updates the App Directory.

Input​

FieldTypeRequiredDescription
intentstringNoOnly return this intent, such as ViewChart
contextTypestringNoOnly return handlers that accept this FDC3 context type, such as fdc3.instrument

Omit both fields to return all intents the user has access to.

Output​

{
"intents": [
{
"intentName": "ViewChart",
"displayName": "View Chart",
"apps": [
{
"appId": "chart-app",
"appName": "Chart App",
"contextTypes": ["fdc3.instrument"]
}
]
}
]
}

Example​

const handlers = await mcp.call("list-intent-handlers", {
intent: "ViewChart",
contextType: "fdc3.instrument"
});

raise-intent​

Raises an FDC3 intent on the user's desktop. HERE selects a registered app to handle it, opens or focuses that app, and passes your context so the app can populate its content.

Input​

FieldTypeRequiredDescription
intentNamestringYesFDC3 intent name, such as ViewChart, ViewContact, or Allocate
contextobjectYesFDC3 context object. Must include a type field with a valid FDC3 context type
targetAppstringNoApp ID of a specific handler. Omit this field to let HERE choose

Output​

FieldTypeDescription
outcomeenumresolved, chooser_shown, or error
resolvedAppstringApp ID that received the intent, if known
latencyMsnumberTime from when HERE received the call to when the intent resolved
errorobjectIncluded when outcome is error

Example​

const result = await mcp.call("raise-intent", {
intentName: "ViewChart",
context: { type: "fdc3.instrument", id: { ticker: "AAPL" } },
targetApp: "chart-app" // optional
});
// → { outcome: "resolved", resolvedApp: "chart-app", latencyMs: 312 }

Resolution behavior​

Which app receives the intent depends on what you pass in and what's registered:

Decision flow for raise-intent resolution: targetApp, single handler, multiple handlers, or error

SituationWhat happensoutcome
targetApp is set and handles the intentThe intent goes straight to that appresolved
No targetApp, and only one app handles the intentThe intent goes straight to that app, without the Intent Chooserresolved
No targetApp, and several apps handle the intentThe Intent Chooser opens so the user can pickchooser_shown
No app handles the intentNothing openserror

HERE skips the Chooser intentionally when there's only one handler. You can't close the Chooser programmatically, so showing it for a single option would interrupt the user unnecessarily.

chooser_shown isn't a failure. It means the user needs to select an app. Have your agent tell the user a chooser is waiting instead of retrying.

Context objects​

Your context must match the FDC3 context type the target app expects. A mismatch is the most common reason an app opens empty.

// Instrument
{ type: "fdc3.instrument", id: { ticker: "AAPL" } }

// Contact
{ type: "fdc3.contact", name: "Jane Doe", id: { email: "jane.doe@example.com" } }

// Trade
{ type: "fdc3.trade", id: { tradeId: "TRD-88213" } }

Check the contextTypes array from list-intent-handlers to see what a handler accepts before you raise an intent. For the full list of types, see the FDC3 context data specification.

Timeouts​

The call waits up to 30 seconds for the desktop to respond, then returns an error. Most intents resolve in well under a second. The longer limit accommodates apps with slow startup times.

If your orchestrator has its own timeout, give it at least 30 seconds plus network latency.

Limits​

  • You receive the outcome, not the result. The response includes the outcome and the app ID. It doesn't include the FDC3 IntentResult from the app.
  • Current user only. Your agent can't raise an intent on someone else's desktop.
  • Session selection isn't deterministic. If a user has more than one EB session running, HERE selects one, and which session it selects isn't guaranteed. Avoid flows that depend on a specific window or machine.
  • No programmatic control of the Chooser. You can't pre-select an app in the Intent Chooser, close it, or check its state.
  • Enterprise Browser apps only. Intents can't reach apps outside EB.
  • Calls are synchronous. There's no async or streaming version. Each call stays open until the intent resolves or times out.

Error handling​

When outcome is error, the response includes an error object. At a minimum, handle the following errors:

ErrorCauseWhat your agent should do
No registered handlerNo App Directory entry declares this intent, or the user can't access any that doDon't retry. Call list-intent-handlers and offer what's available
Invalid contextcontext is malformed, or its type isn't one the handler acceptsDon't retry as is. Rebuild the context to match the handler's contextTypes
Unknown target apptargetApp doesn't handle this intentRetry once without targetApp, or call list-intent-handlers again
Access deniedThe user can't access the app, or a policy blocks the callDon't retry. Tell the user the app isn't available to them
TimeoutThe desktop didn't respond in time, usually because EB isn't running or the app is slow to startRetry once at most, then ask the user to check that Enterprise Browser is running
Feature unavailablecloudInterop isn't on for the organizationDon't retry. An admin must enable cloudInterop for the organization

Build these two rules into your agent from the start:

Don't retry a validation error unchanged. A malformed context fails the same way every time. Correct the context or stop.

Rate-limit your agent. Your agent can raise intents faster than a user can manage the resulting windows. Limit calls per user session, and raise one intent per user request rather than opening apps speculatively.

Auditing and analytics​

HERE logs every intent raised through MCP, whether it succeeds or fails. Each record includes the intent name, context type, requested target app, outcome, and latency, plus the agent and organization that made the call.

Keep the following in mind:

  • Assume your client's compliance and IT teams can see every intent your agent raises. This visibility is what makes agent actions acceptable in production.
  • Excessive or speculative calls appear in those logs, so design your agent accordingly.

get-browser-context returns text and markdown from the user's open EB views, so your agent can work from what the user is looking at. It pairs well with intents: read the context to understand the user, then raise an intent to act on it.

send-notification sends the user a desktop notification. Use it when your agent needs to get the user's attention instead of opening an app.

App and supertab tools let an agent open apps and supertabs directly and work with color channels.

Reference​