Chat platform agent skills (Slack/Discord/Telegram/LINE) for Concinno — native Python API, MCP fallback optional. MIT-licensed SDKs only.
Project description
concinno-skills-chat
Chat-platform agent skills for Concinno.
Native Python API, MCP fallback optional. MIT / Apache-2.0 licensed SDKs only
— we deliberately skip python-telegram-bot (GPL-3.0) to avoid copy-left
contamination of the Concinno ecosystem.
Status
MVP (0.1.0) — four one-shot tools:
| Tool class | Platform | Underlying SDK | SDK licence |
|---|---|---|---|
SlackPost |
Slack | slack-sdk |
MIT |
DiscordPost |
Discord | discord.py |
MIT |
TelegramSend |
Telegram | aiogram |
MIT |
LineSend |
LINE | line-bot-sdk (v3) |
Apache-2.0 |
WhatsApp / Microsoft Teams are intentionally deferred until a maintained Python SDK with a permissive licence exists (as of 2026-04 the ecosystem is either unofficial or AGPL-adjacent).
Install
pip install concinno-skills-chat
All four SDKs are hard dependencies and pulled in automatically.
Credentials
Each platform's bot token lives under a well-known key in the Concinno
CredentialStore, which reads (in order):
- Process runtime overrides via
CredentialStore.set(...). - Env var
CONCINNO_CRED_<UPPER_KEY>. ~/.concinno/credentials.json.
| Key | Env var |
|---|---|
slack_bot_token |
CONCINNO_CRED_SLACK_BOT_TOKEN |
discord_bot_token |
CONCINNO_CRED_DISCORD_BOT_TOKEN |
telegram_bot_token |
CONCINNO_CRED_TELEGRAM_BOT_TOKEN |
line_channel_access_token |
CONCINNO_CRED_LINE_CHANNEL_ACCESS_TOKEN |
Example ~/.concinno/credentials.json:
{
"slack_bot_token": "xoxb-...",
"discord_bot_token": "...",
"telegram_bot_token": "123456:AAA...",
"line_channel_access_token": "..."
}
If a token is missing the tool returns
{"error": "no <service> credentials — set via CredentialStore or env ..."}
rather than crashing.
Usage via Concinno ToolRegistry
When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry
auto-mounts every chat tool:
import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"
from concinno.tools.registry import get_default_registry
reg = get_default_registry()
assert {"SlackPost", "DiscordPost", "TelegramSend", "LineSend"} <= set(
reg.list_deferred()
)
slack = reg.get("SlackPost")
slack.call(action="send", channel="#general", text="hi from concinno")
Direct Python usage
from concinno_skills_chat import (
SlackPost,
DiscordPost,
TelegramSend,
LineSend,
)
SlackPost().call(action="send", channel="C12345", text="hi")
DiscordPost().call(action="send", channel_id=12345, content="hi")
TelegramSend().call(action="send", chat_id=12345, text="hi")
LineSend().call(action="push", user_id="U1234", text="hi")
All tools return {"ok": True, ...} on success or {"error": "..."}
on failure — same shape as the other Concinno built-in tools. No
exceptions escape the call() surface.
Concurrency
All four tools set is_concurrency_safe = False. Chat platform rate
limits make serial calls the sane default; the Concinno scheduler will
honour this automatically.
License
Apache-2.0. See LICENSE in the Concinno monorepo.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file concinno_skills_chat-0.1.0.tar.gz.
File metadata
- Download URL: concinno_skills_chat-0.1.0.tar.gz
- Upload date:
- Size: 40.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21049c33d1591655bcdc71b15e8c27c7711cdf10a719f628cc828b955dc95d77
|
|
| MD5 |
b5232cfbaca670ac012d2e5b0bcd35ff
|
|
| BLAKE2b-256 |
fca2a637cab4e7a162db687e84ba707c90edf80d5b9db19bee4496396eed0bea
|
File details
Details for the file concinno_skills_chat-0.1.0-py3-none-any.whl.
File metadata
- Download URL: concinno_skills_chat-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f07bf44db1ef7aeeef16dd5ca897ccdf319e6c06db2ca3fee116f79809b4559a
|
|
| MD5 |
88457a2db08657296fce62aaeabd2b92
|
|
| BLAKE2b-256 |
98b995466c23635d167bd3867c783a0f7e5fa80e66f08c39deabb5660ee6a607
|