Skip to main content
tiago
Conversationalist
July 27, 2026
Question

channel access for draft creation

  • July 27, 2026
  • 3 replies
  • 45 views

Hi,

We're building a BYO AI agent against the agents beta + MCP server. Draft creation works, but only once we pass an explicit channelId, and we'd like to understand the intended model before we build around our workaround.

Same conversation, no existing drafts, three calls back to back:

create_draft(conversationId) -> -32000: Failed to create draft reply

create_draft(conversationId, channelId=cha_AAAAA) -> -32001: You do not have access to channel cha_AAAAA

create_draft(conversationId, channelId=cha_BBBBB) -> {"draftId": "msg_...", "channelType": "gmail"}

Our reading: cha_BBBBB is one of the 13 channels list_channels returns for this agent; cha_AAAAA isn't. With no channelId, Front falls back to the conversation's own channel — also not one of the 13 — and that failure comes back as a contentless -32000 rather than the clear -32001 we get when we name the channel ourselves.

What we want is simple: the agent drafts a reply on the conversation's own channel, so the draft is addressed correctly for that thread. We don't want it drafting from a fixed address.

Questions:

  1. How is channel/inbox access granted to an agent? The setup wizard's permissions are per-action (create_draftadd_comment), not per-inbox. Our agent sees 18 inboxes via list_inboxes but only 13 channels, and the inbox we're testing in has no channel it can use. We'd like it to be able to draft on the channels of the inboxes it's invited into.
  2. Is channelId an access check rather than a sender selection on reply drafts? When we pass cha_BBBBB (an unrelated shared address) the call succeeds, and the resulting draft appears in the composer addressed on the conversation's channel — not cha_BBBBB. That's the behaviour we want, but we don't want to depend on it if it's incidental. Which channel would that draft actually send from?
  3. Should the no-channelId case return -32001 too? The opaque -32000 cost us several hours and three wrong theories; -32001 was immediately actionable.

Happy to share the workspace, agent id and conversation id directly if that helps you reproduce.

Thanks!

    3 replies

    Jacaques
    Fronteer
    July 28, 2026

    Hi,

    Thank you for your detailed message. Regarding your questions:

    1. How is channel/inbox access granted to an agent?

    It's implied from the namespaces your agent is given access to in the setup wizard. Your agent automatically gets access to the public inboxes from these namespaces and their channels. We're planning to add the ability to grant access to private inboxes later on.

    2. Is channelId an access check rather than a sender selection on reply drafts?

    It's not an access check. Passing cha_BBBBB should result in this channel being used to send the message.

    3. Should the no-channelId case return -32001 too?

    Yes, I agree the error should be improved here, we'll look into it.


    To investigate the issue more efficiently, it would help to have the conversation ID, channel ID, and agent username you're using. Could you send this information to support@front.com with a link to this conversation?

    Thank you for this helpful feedback as we work on the beta.

    Jacques

    tiago
    tiagoAuthor
    Conversationalist
    July 29, 2026

    Thanks for following it up. I sent a message to support@front.com with the requested information.

    Jacaques
    Fronteer
    July 31, 2026

    Following up here, we investigated the issue with Tiago and concluded that omitting the channelId when using create_draft yields the desired behavior. Front automatically resolves the most appropriate channel to reply to the conversation at hand.

    We also noted that our error messages weren't explicit enough and should be improved.