Product documentation · Current desktop UI

Connect Slack, Discord, Jira, Confluence, and ClickUp

Use connected services to send a production update, turn a result into a task, or publish a page from Tech Connector. Set up each destination in the desktop app first. Sending or creating content is a separate, explicit action.

Start in the desktop app

  1. Open Connected Applications in the menu.
  2. Under Messaging, choose Slack Login or Discord Login. Enter a webhook for sending, and optionally a bot token for live channel and user discovery. For Discord discovery, also enter the server (guild) ID. Save.
  3. Under Services, choose Atlassian Settings for Jira and Confluence, or ClickUp Settings for ClickUp. Save the fields described below.
  4. Open Connected Applications → Capability Status to see which fields are configured. A “connected” row means the required fields are present; it is not a successful live sign-in or delivery test.
  5. In the Slack or Discord dialog, use Send Test to check its webhook. Load Live Names checks channel/user discovery separately. Atlassian's Load Live Data checks its configured API access. ClickUp reports the result of the next approved task creation.

The provider buttons in Customization → Connected Accounts & Logins open setup pages. They do not automatically connect an account. Tech Connector does not currently finish an OAuth callback or exchange its authorization code for a token. api.integrations.oauth_url(provider) likewise returns a setup or authorization URL; it does not store credentials.

What each connection needs

Slack

Enter an incoming webhook URL to send to its configured destination. A bot token enables Load Live Names and api.integrations.targets("slack", refresh=True); the bot token alone does not make inline dispatch send to any arbitrary channel. Set a default channel label if you want to use @slack.here. An explicitly named channel needs its own configured webhook or must match the default. Tech Connector refuses to silently send to a different channel.

Discord

Enter a webhook URL to send to its configured channel. A bot token plus server (guild) ID enables live channel/user discovery. Set a default channel label for @discord.here. As with Slack, discovery does not grant arbitrary-channel sending: an explicit target needs a matching configured webhook or default.

Jira

In Atlassian Settings, enter your Atlassian Cloud site URL, account email, and API token. Set a Jira project key as the default target. An approved @jira action creates an issue in that project. @jira.PROJ.bug chooses the Bug type; story and epic are also recognized. Check the created issue in Jira after dispatch.

Confluence

The same Atlassian site, email, and API token are used. Set a Confluence space ID as the default target. An approved @confluence or @docs action creates a page. @confluence.SPACE selects a space; an optional numeric suffix such as @confluence.SPACE.12345 selects a parent page ID. Check the resulting page and its permissions in Confluence.

ClickUp

In ClickUp Settings, enter a ClickUp API token and the default List ID. An approved @clickup action creates a task in that list. You can use @clickup.123456 to name a different List ID; @clickup.123456.bug requests the bug status, which must exist in that ClickUp list. Saving settings only confirms that the fields are present; check the task result and target list after creation.

Preview before you publish

The Python API uses the same configured connections. Replace the sample project path and destination with your own. These examples do not connect an account on their own.

from tech_connector.api import create_api

api = create_api(project_root="C:/your-project")
slack = api.integrations.status("slack")
if slack.ok:
    print(slack.result["value"]["configured"])

text = "@jira.PROJ.bug Animation export loses the final frame"
preview = api.integrations.dispatch(text, dry_run=True)
if preview.ok:
    print(preview.result["value"]["references"])

# Run only after reviewing the destination and text:
result = api.integrations.dispatch(text, approved=True)
if result.ok:
    print(result.result["value"]["results"])
else:
    print(result.error)

dry_run=True parses references without contacting the service. It does not validate credentials, permissions, webhook routing, or whether a project, space, or list exists. approved=True is the caller's explicit authorization to perform the external action; the Python call does not open a separate confirmation dialog. Inspect the returned per-destination result and verify the created item or delivered message in the service.

Find destinations and check status

api.integrations.status() returns sanitized configuration rows for all registered services. Pass an account ID such as "atlassian" or "clickup" for one row. api.integrations.applications() combines service configuration, license status, and detected DCC bridges. Neither method proves delivery.

api.integrations.targets("slack") and targets("discord") return cached channel/user names. Pass refresh=True for a live lookup; this requires the relevant bot token, and Discord also needs a server ID. Listing a target does not mean that the configured webhook can send to it.

api.integrations.suggest(query) provides Smart Search completions, while api.integrations.resolve(text) adds setup-aware context for a selected reference. These are discovery aids, not external write actions.

If an action fails

  • Setup needed or missing target: finish the required fields and set a default project, space, channel, or list. Use an explicit target when needed.
  • Slack or Discord target has no dedicated webhook: choose the configured default (@slack.here or @discord.here) or configure a webhook for that destination. A bot token used for discovery does not replace the webhook.
  • Live names fail to load: check bot permissions; Discord also needs its server ID. A working webhook may still send even when discovery fails.
  • Atlassian or ClickUp rejects a creation: check the site/list ID, token, account permissions, and the service's returned error. A saved token has not been validated merely by the status row.

Tech Connector's public integration namespace is a set of workflow operations, not a copy of each provider's full REST API. For exact method signatures and return types, use the Python method reference or api.surface() in your installed build.