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
- Open Connected Applications in the menu.
- 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.
- Under Services, choose Atlassian Settings for Jira and Confluence, or ClickUp Settings for ClickUp. Save the fields described below.
- 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.
- 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.hereor@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.