algen-agent-tools 0.1.0a1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. algen_agent_tools-0.1.0a1/.gitignore +14 -0
  2. algen_agent_tools-0.1.0a1/CHANGELOG.md +64 -0
  3. algen_agent_tools-0.1.0a1/LICENSE +201 -0
  4. algen_agent_tools-0.1.0a1/NOTICE +8 -0
  5. algen_agent_tools-0.1.0a1/PKG-INFO +197 -0
  6. algen_agent_tools-0.1.0a1/README.md +153 -0
  7. algen_agent_tools-0.1.0a1/docs/assets/brand/README.md +19 -0
  8. algen_agent_tools-0.1.0a1/docs/assets/brand/banner-dark.svg +29 -0
  9. algen_agent_tools-0.1.0a1/docs/assets/brand/banner-light.svg +29 -0
  10. algen_agent_tools-0.1.0a1/docs/assets/brand/logo-dark-background.svg +18 -0
  11. algen_agent_tools-0.1.0a1/docs/assets/brand/logo-dark.svg +16 -0
  12. algen_agent_tools-0.1.0a1/docs/assets/brand/logo-light-background.svg +18 -0
  13. algen_agent_tools-0.1.0a1/docs/assets/brand/logo-light.svg +16 -0
  14. algen_agent_tools-0.1.0a1/docs/compatibility.md +24 -0
  15. algen_agent_tools-0.1.0a1/docs/connector-policy.md +55 -0
  16. algen_agent_tools-0.1.0a1/docs/connectors/gmail.md +85 -0
  17. algen_agent_tools-0.1.0a1/docs/connectors/postgres.md +124 -0
  18. algen_agent_tools-0.1.0a1/docs/connectors/sample.md +27 -0
  19. algen_agent_tools-0.1.0a1/docs/connectors/smtp.md +85 -0
  20. algen_agent_tools-0.1.0a1/docs/mcp-overlays.md +122 -0
  21. algen_agent_tools-0.1.0a1/docs/migrating-from-runtime.md +68 -0
  22. algen_agent_tools-0.1.0a1/docs/releasing.md +75 -0
  23. algen_agent_tools-0.1.0a1/docs/writing-a-connector.md +69 -0
  24. algen_agent_tools-0.1.0a1/pyproject.toml +114 -0
  25. algen_agent_tools-0.1.0a1/src/algen_agent_tools/__init__.py +16 -0
  26. algen_agent_tools-0.1.0a1/src/algen_agent_tools/_env.py +58 -0
  27. algen_agent_tools-0.1.0a1/src/algen_agent_tools/_plugin.py +44 -0
  28. algen_agent_tools-0.1.0a1/src/algen_agent_tools/gmail/__init__.py +22 -0
  29. algen_agent_tools-0.1.0a1/src/algen_agent_tools/gmail/client.py +275 -0
  30. algen_agent_tools-0.1.0a1/src/algen_agent_tools/gmail/plugin.py +4 -0
  31. algen_agent_tools-0.1.0a1/src/algen_agent_tools/gmail/toolkit.py +90 -0
  32. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mail/__init__.py +41 -0
  33. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mail/fake.py +72 -0
  34. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mail/models.py +182 -0
  35. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mail/tool.py +143 -0
  36. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/__init__.py +28 -0
  37. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/__main__.py +3 -0
  38. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/fake.py +65 -0
  39. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/overlay.py +269 -0
  40. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/plugin.py +49 -0
  41. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/session.py +175 -0
  42. algen_agent_tools-0.1.0a1/src/algen_agent_tools/mcp/snapshot.py +97 -0
  43. algen_agent_tools-0.1.0a1/src/algen_agent_tools/postgres/__init__.py +33 -0
  44. algen_agent_tools-0.1.0a1/src/algen_agent_tools/postgres/client.py +38 -0
  45. algen_agent_tools-0.1.0a1/src/algen_agent_tools/postgres/fake.py +111 -0
  46. algen_agent_tools-0.1.0a1/src/algen_agent_tools/postgres/plugin.py +5 -0
  47. algen_agent_tools-0.1.0a1/src/algen_agent_tools/postgres/toolkit.py +325 -0
  48. algen_agent_tools-0.1.0a1/src/algen_agent_tools/py.typed +0 -0
  49. algen_agent_tools-0.1.0a1/src/algen_agent_tools/sample/__init__.py +9 -0
  50. algen_agent_tools-0.1.0a1/src/algen_agent_tools/sample/plugin.py +4 -0
  51. algen_agent_tools-0.1.0a1/src/algen_agent_tools/sample/toolkit.py +23 -0
  52. algen_agent_tools-0.1.0a1/src/algen_agent_tools/smtp/__init__.py +9 -0
  53. algen_agent_tools-0.1.0a1/src/algen_agent_tools/smtp/plugin.py +4 -0
  54. algen_agent_tools-0.1.0a1/src/algen_agent_tools/smtp/sender.py +153 -0
  55. algen_agent_tools-0.1.0a1/src/algen_agent_tools/smtp/toolkit.py +82 -0
  56. algen_agent_tools-0.1.0a1/src/algen_agent_tools/testing.py +131 -0
@@ -0,0 +1,14 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ .coverage
8
+ coverage.xml
9
+ htmlcov/
10
+ dist/
11
+ build/
12
+ *.egg-info/
13
+ .env
14
+ .DS_Store
@@ -0,0 +1,64 @@
1
+ # Changelog
2
+
3
+ All notable changes to Algen Agent Tools are recorded here. The project follows
4
+ [Semantic Versioning](https://semver.org/); during the `0.x` series public contracts are
5
+ experimental, and every breaking change carries an upgrade note.
6
+
7
+ A tool's name, input schema, side effect and permission are part of the public contract.
8
+
9
+ ## [Unreleased]
10
+
11
+ ## [0.1.0a1] - 2026-10-27
12
+
13
+ ### Added
14
+
15
+ - The package: `algen-agent-tools`, importable as `algen_agent_tools`, supporting
16
+ `algen-agent-runtime>=0.1.0a11,<0.2`. Each connector is a Runtime `Toolkit` registered by a
17
+ plugin in the `algen_agent_runtime.plugins` entry point group under the trusted prefix
18
+ `algen_agent_tools`, with one optional extra per connector and an `all` extra.
19
+ - `algen_agent_tools.sample`: a dependency-free reference toolkit (`sample.echo`) used to check
20
+ an install end to end and as the template for new connectors.
21
+ - PostgreSQL (`algen_agent_tools.postgres`, extra `postgres`): `PostgresToolkit.query` declares
22
+ a named, parameterised query as a typed tool, so the model never writes SQL. Reads run in a
23
+ read-only transaction and stream through a cursor that fails past a row limit; every
24
+ statement runs under a `statement_timeout` equal to the tool's timeout; writes can bind the
25
+ call's idempotency key for exactly-once SQL; unknown input fields are refused.
26
+ `fetch_rows` serves custom read tools. The plugin registers `postgres.list_tables` and
27
+ `postgres.describe_table`, limited to the configured schemas. `FakePostgres` for tests.
28
+ - SMTP (`algen_agent_tools.smtp`) and Gmail (`algen_agent_tools.gmail`): `smtp.send_email`,
29
+ `gmail.send_email` (external, keyed, one attempt) and `gmail.list_messages` (read). The sender
30
+ is fixed by the deployment, the model cannot add headers, an optional domain allowlist bounds
31
+ recipients and Reply-To, and attachments are offered only with an artifact loader that receives
32
+ the call's `ToolContext` to check the artifact's tenant. The transports
33
+ (`SmtpEmailSender`, `GmailMailboxClient`) and message models (`algen_agent_tools.mail`) move
34
+ from `algen_agent_runtime.communications`, with one fix: the Gmail transport now delivers Bcc
35
+ recipients (it put no Bcc header in the raw message, so Gmail never sent to them). `FakeMailbox` for tests. An agent that
36
+ sends email leaves the `pii` guardrail out of `guardrail_policy.tool_policies`; with it, the
37
+ Runtime refuses the redacted arguments (documented on each connector page).
38
+ - MCP governance overlays (`algen_agent_tools.mcp`, extra `mcp`): `McpOverlay` declares, per
39
+ remote tool, its side effect, approval rule, timeout, permissions, result limit and the input
40
+ schema it was reviewed against. Each declared tool is an ordinary Runtime tool, so `describe`
41
+ and Studio list it before anything connects; undeclared tools are never exposed; arguments are
42
+ validated against the closed schema; a tool the server dropped or whose schema changed is
43
+ refused (`on_drift: allow` relaxes this); stdio environment values must be `env://`
44
+ references; HTTP transports reach only the server's host. `overlay_plugin` declares an
45
+ overlay file from a project's plugin, `python -m algen_agent_tools.mcp snapshot` drafts one
46
+ from a live server for review, and `FakeMcpServer` serves tests.
47
+ - `docs/migrating-from-runtime.md` maps the Runtime's deprecated `communications` connectors
48
+ and `database_tool` to this package.
49
+ - `algen_agent_tools.testing`: `assert_toolkit_contract` and `toolkit_contract_problems` (the
50
+ Runtime's tool contract plus naming, permission-prefix and no-passthrough rules),
51
+ `describe_plugin` and `plugin_tools` (the Runtime inventory for one plugin, without calling a
52
+ tool).
53
+ - An end-to-end test runs an agent through the Runtime's executor, guardrails and approval
54
+ flow: the email is sent once after approval and never after rejection.
55
+ - CI: a PostgreSQL service-container job runs the integration tests; live email tests run only
56
+ with `ALGEN_TOOLS_LIVE=1`.
57
+ - CI: lint, strict typing and tests on Python 3.12 and 3.13; the suite against the lowest and
58
+ highest supported Runtime; coverage; package build and a clean-install check that describes
59
+ every installed plugin; DCO, CodeQL, pip-audit, Bandit, Gitleaks and dependency review.
60
+ - Brand assets (`docs/assets/brand`): the Tools logo and light and dark README banners in the
61
+ Algen palette, and `docs/releasing.md`.
62
+ - Project policies: connector entry criteria, security review checklist, versioning and
63
+ deprecation policy (`docs/connector-policy.md`), contributor and agent guides, security policy
64
+ and governance.
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,8 @@
1
+ Algen Agent Tools
2
+ Copyright AlgenAI
3
+
4
+ This product is built on Algen Agent Runtime (Apache-2.0).
5
+
6
+ Connector names identify third-party services and protocols. Those names are trademarks of their
7
+ respective owners; their use does not imply endorsement. Third-party dependencies retain their
8
+ respective copyright and license terms.
@@ -0,0 +1,197 @@
1
+ Metadata-Version: 2.5
2
+ Name: algen-agent-tools
3
+ Version: 0.1.0a1
4
+ Summary: Curated, governed connectors for Algen Agent Runtime agents
5
+ Project-URL: Homepage, https://github.com/AlgenAI/algen-agent-tools
6
+ Project-URL: Source, https://github.com/AlgenAI/algen-agent-tools
7
+ Project-URL: Documentation, https://github.com/AlgenAI/algen-agent-tools#readme
8
+ Project-URL: Issues, https://github.com/AlgenAI/algen-agent-tools/issues
9
+ Project-URL: Changelog, https://github.com/AlgenAI/algen-agent-tools/blob/main/CHANGELOG.md
10
+ Author: AlgenAI
11
+ Maintainer: AlgenAI
12
+ License-Expression: Apache-2.0
13
+ License-File: LICENSE
14
+ License-File: NOTICE
15
+ Keywords: agent-tools,agents,ai-governance,connectors,llm,mcp
16
+ Classifier: Development Status :: 2 - Pre-Alpha
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: License :: OSI Approved :: Apache Software License
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
+ Classifier: Topic :: Software Development :: Libraries
25
+ Classifier: Typing :: Typed
26
+ Requires-Python: >=3.12
27
+ Requires-Dist: algen-agent-runtime<0.2,>=0.1.0a11
28
+ Provides-Extra: all
29
+ Requires-Dist: algen-agent-runtime[mcp]<0.2,>=0.1.0a11; extra == 'all'
30
+ Requires-Dist: asyncpg<1,>=0.29; extra == 'all'
31
+ Provides-Extra: dev
32
+ Requires-Dist: mypy<2,>=1.11; extra == 'dev'
33
+ Requires-Dist: pytest-asyncio<2,>=1.3; extra == 'dev'
34
+ Requires-Dist: pytest-cov<7,>=5; extra == 'dev'
35
+ Requires-Dist: pytest<10,>=9.0.3; extra == 'dev'
36
+ Requires-Dist: ruff<1,>=0.6; extra == 'dev'
37
+ Provides-Extra: gmail
38
+ Provides-Extra: mcp
39
+ Requires-Dist: algen-agent-runtime[mcp]<0.2,>=0.1.0a11; extra == 'mcp'
40
+ Provides-Extra: postgres
41
+ Requires-Dist: asyncpg<1,>=0.29; extra == 'postgres'
42
+ Provides-Extra: smtp
43
+ Description-Content-Type: text/markdown
44
+
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/AlgenAI/algen-agent-tools/refs/heads/main/docs/assets/brand/banner-dark.svg">
47
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/AlgenAI/algen-agent-tools/refs/heads/main/docs/assets/brand/banner-light.svg">
48
+ <img alt="Algen Agent Tools — Typed tools for agents. Governed by default." src="https://raw.githubusercontent.com/AlgenAI/algen-agent-tools/refs/heads/main/docs/assets/brand/banner-light.svg">
49
+ </picture>
50
+
51
+ # Algen Agent Tools
52
+
53
+ [![Quality](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/quality.yml/badge.svg)](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/quality.yml)
54
+ [![Security](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/security.yml/badge.svg)](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/security.yml)
55
+ [![PyPI](https://img.shields.io/pypi/v/algen-agent-tools.svg)](https://pypi.org/project/algen-agent-tools/)
56
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/downloads/)
57
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
58
+
59
+ Curated, governed connectors for agents built on
60
+ [Algen Agent Runtime](https://github.com/AlgenAI/algen-agent-runtime).
61
+
62
+ Each connector is a Runtime `Toolkit` of narrow, typed actions, registered through a declared
63
+ plugin. An agent names the plugin in `agent.yaml`, the Runtime checks every tool it enables, and
64
+ Algen Agent Studio lists each tool with its side effect, permissions and environment variables
65
+ from `algen-agent-runtime describe`, without running project code.
66
+
67
+ > [!IMPORTANT]
68
+ > `0.1.0a1` is a pre-release. Tool contracts may change between alpha releases; every change is
69
+ > recorded in [CHANGELOG.md](CHANGELOG.md) with an upgrade note. Review the
70
+ > [security policy](SECURITY.md) and each connector's guarantees before deployment.
71
+
72
+ ## Why a separate package
73
+
74
+ - The Runtime stays small and domain-agnostic; vendor APIs change faster than its core.
75
+ - Connectors get their own release cadence, owners and security review.
76
+ - Every connector is a plugin, so Studio sees it with no extra work.
77
+
78
+ | Layer | Package | Contains |
79
+ | --- | --- | --- |
80
+ | Core | `algen-agent-runtime` | Contracts, `@tool`, presets, `Toolkit`, plugins, `describe`, MCP and HTTP adapters |
81
+ | Connectors | `algen-agent-tools` | Generic toolkits, one optional extra each |
82
+ | Domain packs | Their own packages | Product-specific tools (hiring, text-to-SQL, HR, ...) |
83
+
84
+ ## Install
85
+
86
+ Python 3.12 or 3.13. Install the package with the extra for each connector you use:
87
+
88
+ ```bash
89
+ pip install "algen-agent-tools[postgres]" # one connector
90
+ pip install "algen-agent-tools[all]" # every connector
91
+ ```
92
+
93
+ The package supports `algen-agent-runtime>=0.1.0a11,<0.2`; see
94
+ [compatibility](docs/compatibility.md).
95
+
96
+ ## Use a connector
97
+
98
+ Name the connector's plugin in `domain_plugins`, trust the package's prefix, enable the tools
99
+ and grant their permissions:
100
+
101
+ ```yaml
102
+ agents:
103
+ - name: assistant
104
+ version: 1.0.0
105
+ description: Checks that tools are wired up
106
+ system_instructions: Use sample.echo when asked to echo text.
107
+ default_model: {name: m, provider: demo}
108
+ domain_plugins: [algen_agent_tools.sample]
109
+ enabled_tools: [sample.echo]
110
+ tool_permissions: [sample.read]
111
+ security:
112
+ trusted_plugin_prefixes: [algen_agent_tools]
113
+ ```
114
+
115
+ Then check the project the way Studio will:
116
+
117
+ ```bash
118
+ algen-agent-runtime check agent.yaml
119
+ algen-agent-runtime describe --config agent.yaml --json
120
+ ```
121
+
122
+ Each zero-configuration plugin reads its settings from `env://` references at the moment its
123
+ client first opens, never at import. To configure a connector in code (another name, other
124
+ environment variables, a fake for tests), build its toolkit in your own plugin:
125
+
126
+ ```python
127
+ from algen_agent_runtime.plugins.sdk import PluginManifest, plugin
128
+ from algen_agent_tools.sample import sample_toolkit
129
+
130
+
131
+ @plugin(PluginManifest(name="acme.tools", version="1.0.0", publisher="acme"))
132
+ class AcmeTools:
133
+ def register(self, context):
134
+ sample_toolkit(name="diagnostics").register(context)
135
+ ```
136
+
137
+ ## Connectors
138
+
139
+ | Connector | Plugin | Extra | Tools | Docs |
140
+ | --- | --- | --- | --- | --- |
141
+ | PostgreSQL | `algen_agent_tools.postgres` | `postgres` | `postgres.list_tables`, `postgres.describe_table` (read), plus your own typed queries | [postgres](docs/connectors/postgres.md) |
142
+ | SMTP | `algen_agent_tools.smtp` | `smtp` | `smtp.send_email` (external) | [smtp](docs/connectors/smtp.md) |
143
+ | Gmail | `algen_agent_tools.gmail` | `gmail` | `gmail.list_messages` (read), `gmail.send_email` (external) | [gmail](docs/connectors/gmail.md) |
144
+ | Sample | `algen_agent_tools.sample` | none | `sample.echo` (read) | [sample](docs/connectors/sample.md) |
145
+
146
+ ### MCP servers
147
+
148
+ For services with a well-maintained MCP server, `algen_agent_tools.mcp` adds a
149
+ [governance overlay](docs/mcp-overlays.md) instead of a native client: a reviewed mapping that
150
+ declares each remote tool's side effect, permission, approval rule and pinned input schema. The
151
+ tools appear in `describe` and Studio before anything connects, undeclared tools are never
152
+ exposed, and a tool whose schema changes is refused until it is reviewed again.
153
+
154
+ ```bash
155
+ pip install "algen-agent-tools[mcp]"
156
+ python -m algen_agent_tools.mcp snapshot server.yaml --name github --output github.overlay.yaml
157
+ ```
158
+
159
+ Moving from the Runtime's built-in email and database connectors? See
160
+ [migrating from the Runtime](docs/migrating-from-runtime.md).
161
+
162
+ Proposed connectors follow the [connector policy](docs/connector-policy.md): at least two
163
+ projects need it, it holds no domain logic, it has an owner and it passed a security review.
164
+ When a well-maintained MCP server exists, the package ships a governance overlay instead of a
165
+ native client.
166
+
167
+ ## Rules every connector follows
168
+
169
+ - Narrow, typed actions (`list_open_invoices`, `post_message`), never a raw passthrough such as
170
+ free-form SQL or arbitrary HTTP.
171
+ - Side effect, permission, idempotency, retries and timeout come from a Runtime preset.
172
+ Anything that writes, sends or deletes is keyed by the idempotency key and tried once.
173
+ - Secrets are `env://` references only, resolved when a client opens.
174
+ - An in-memory fake for offline tests; live tests run only when `ALGEN_TOOLS_LIVE=1`.
175
+ - Every toolkit passes `algen_agent_tools.testing.assert_toolkit_contract`.
176
+
177
+ ## Development
178
+
179
+ ```bash
180
+ python3.12 -m venv .venv
181
+ source .venv/bin/activate
182
+ python -m pip install --upgrade pip
183
+ python -m pip install -e '.[dev]'
184
+ make check
185
+ ```
186
+
187
+ See [CONTRIBUTING.md](CONTRIBUTING.md), [writing a connector](docs/writing-a-connector.md) and
188
+ [the release process](docs/releasing.md).
189
+
190
+ ## Security
191
+
192
+ Report vulnerabilities privately as described in [SECURITY.md](SECURITY.md). Do not open a public
193
+ issue.
194
+
195
+ ## License
196
+
197
+ [Apache License 2.0](LICENSE).
@@ -0,0 +1,153 @@
1
+ <picture>
2
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/AlgenAI/algen-agent-tools/refs/heads/main/docs/assets/brand/banner-dark.svg">
3
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/AlgenAI/algen-agent-tools/refs/heads/main/docs/assets/brand/banner-light.svg">
4
+ <img alt="Algen Agent Tools — Typed tools for agents. Governed by default." src="https://raw.githubusercontent.com/AlgenAI/algen-agent-tools/refs/heads/main/docs/assets/brand/banner-light.svg">
5
+ </picture>
6
+
7
+ # Algen Agent Tools
8
+
9
+ [![Quality](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/quality.yml/badge.svg)](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/quality.yml)
10
+ [![Security](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/security.yml/badge.svg)](https://github.com/AlgenAI/algen-agent-tools/actions/workflows/security.yml)
11
+ [![PyPI](https://img.shields.io/pypi/v/algen-agent-tools.svg)](https://pypi.org/project/algen-agent-tools/)
12
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue.svg)](https://www.python.org/downloads/)
13
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
14
+
15
+ Curated, governed connectors for agents built on
16
+ [Algen Agent Runtime](https://github.com/AlgenAI/algen-agent-runtime).
17
+
18
+ Each connector is a Runtime `Toolkit` of narrow, typed actions, registered through a declared
19
+ plugin. An agent names the plugin in `agent.yaml`, the Runtime checks every tool it enables, and
20
+ Algen Agent Studio lists each tool with its side effect, permissions and environment variables
21
+ from `algen-agent-runtime describe`, without running project code.
22
+
23
+ > [!IMPORTANT]
24
+ > `0.1.0a1` is a pre-release. Tool contracts may change between alpha releases; every change is
25
+ > recorded in [CHANGELOG.md](CHANGELOG.md) with an upgrade note. Review the
26
+ > [security policy](SECURITY.md) and each connector's guarantees before deployment.
27
+
28
+ ## Why a separate package
29
+
30
+ - The Runtime stays small and domain-agnostic; vendor APIs change faster than its core.
31
+ - Connectors get their own release cadence, owners and security review.
32
+ - Every connector is a plugin, so Studio sees it with no extra work.
33
+
34
+ | Layer | Package | Contains |
35
+ | --- | --- | --- |
36
+ | Core | `algen-agent-runtime` | Contracts, `@tool`, presets, `Toolkit`, plugins, `describe`, MCP and HTTP adapters |
37
+ | Connectors | `algen-agent-tools` | Generic toolkits, one optional extra each |
38
+ | Domain packs | Their own packages | Product-specific tools (hiring, text-to-SQL, HR, ...) |
39
+
40
+ ## Install
41
+
42
+ Python 3.12 or 3.13. Install the package with the extra for each connector you use:
43
+
44
+ ```bash
45
+ pip install "algen-agent-tools[postgres]" # one connector
46
+ pip install "algen-agent-tools[all]" # every connector
47
+ ```
48
+
49
+ The package supports `algen-agent-runtime>=0.1.0a11,<0.2`; see
50
+ [compatibility](docs/compatibility.md).
51
+
52
+ ## Use a connector
53
+
54
+ Name the connector's plugin in `domain_plugins`, trust the package's prefix, enable the tools
55
+ and grant their permissions:
56
+
57
+ ```yaml
58
+ agents:
59
+ - name: assistant
60
+ version: 1.0.0
61
+ description: Checks that tools are wired up
62
+ system_instructions: Use sample.echo when asked to echo text.
63
+ default_model: {name: m, provider: demo}
64
+ domain_plugins: [algen_agent_tools.sample]
65
+ enabled_tools: [sample.echo]
66
+ tool_permissions: [sample.read]
67
+ security:
68
+ trusted_plugin_prefixes: [algen_agent_tools]
69
+ ```
70
+
71
+ Then check the project the way Studio will:
72
+
73
+ ```bash
74
+ algen-agent-runtime check agent.yaml
75
+ algen-agent-runtime describe --config agent.yaml --json
76
+ ```
77
+
78
+ Each zero-configuration plugin reads its settings from `env://` references at the moment its
79
+ client first opens, never at import. To configure a connector in code (another name, other
80
+ environment variables, a fake for tests), build its toolkit in your own plugin:
81
+
82
+ ```python
83
+ from algen_agent_runtime.plugins.sdk import PluginManifest, plugin
84
+ from algen_agent_tools.sample import sample_toolkit
85
+
86
+
87
+ @plugin(PluginManifest(name="acme.tools", version="1.0.0", publisher="acme"))
88
+ class AcmeTools:
89
+ def register(self, context):
90
+ sample_toolkit(name="diagnostics").register(context)
91
+ ```
92
+
93
+ ## Connectors
94
+
95
+ | Connector | Plugin | Extra | Tools | Docs |
96
+ | --- | --- | --- | --- | --- |
97
+ | PostgreSQL | `algen_agent_tools.postgres` | `postgres` | `postgres.list_tables`, `postgres.describe_table` (read), plus your own typed queries | [postgres](docs/connectors/postgres.md) |
98
+ | SMTP | `algen_agent_tools.smtp` | `smtp` | `smtp.send_email` (external) | [smtp](docs/connectors/smtp.md) |
99
+ | Gmail | `algen_agent_tools.gmail` | `gmail` | `gmail.list_messages` (read), `gmail.send_email` (external) | [gmail](docs/connectors/gmail.md) |
100
+ | Sample | `algen_agent_tools.sample` | none | `sample.echo` (read) | [sample](docs/connectors/sample.md) |
101
+
102
+ ### MCP servers
103
+
104
+ For services with a well-maintained MCP server, `algen_agent_tools.mcp` adds a
105
+ [governance overlay](docs/mcp-overlays.md) instead of a native client: a reviewed mapping that
106
+ declares each remote tool's side effect, permission, approval rule and pinned input schema. The
107
+ tools appear in `describe` and Studio before anything connects, undeclared tools are never
108
+ exposed, and a tool whose schema changes is refused until it is reviewed again.
109
+
110
+ ```bash
111
+ pip install "algen-agent-tools[mcp]"
112
+ python -m algen_agent_tools.mcp snapshot server.yaml --name github --output github.overlay.yaml
113
+ ```
114
+
115
+ Moving from the Runtime's built-in email and database connectors? See
116
+ [migrating from the Runtime](docs/migrating-from-runtime.md).
117
+
118
+ Proposed connectors follow the [connector policy](docs/connector-policy.md): at least two
119
+ projects need it, it holds no domain logic, it has an owner and it passed a security review.
120
+ When a well-maintained MCP server exists, the package ships a governance overlay instead of a
121
+ native client.
122
+
123
+ ## Rules every connector follows
124
+
125
+ - Narrow, typed actions (`list_open_invoices`, `post_message`), never a raw passthrough such as
126
+ free-form SQL or arbitrary HTTP.
127
+ - Side effect, permission, idempotency, retries and timeout come from a Runtime preset.
128
+ Anything that writes, sends or deletes is keyed by the idempotency key and tried once.
129
+ - Secrets are `env://` references only, resolved when a client opens.
130
+ - An in-memory fake for offline tests; live tests run only when `ALGEN_TOOLS_LIVE=1`.
131
+ - Every toolkit passes `algen_agent_tools.testing.assert_toolkit_contract`.
132
+
133
+ ## Development
134
+
135
+ ```bash
136
+ python3.12 -m venv .venv
137
+ source .venv/bin/activate
138
+ python -m pip install --upgrade pip
139
+ python -m pip install -e '.[dev]'
140
+ make check
141
+ ```
142
+
143
+ See [CONTRIBUTING.md](CONTRIBUTING.md), [writing a connector](docs/writing-a-connector.md) and
144
+ [the release process](docs/releasing.md).
145
+
146
+ ## Security
147
+
148
+ Report vulnerabilities privately as described in [SECURITY.md](SECURITY.md). Do not open a public
149
+ issue.
150
+
151
+ ## License
152
+
153
+ [Apache License 2.0](LICENSE).
@@ -0,0 +1,19 @@
1
+ # Tools brand assets
2
+
3
+ | Asset | Background | Intended use |
4
+ | --- | --- | --- |
5
+ | `logo-light.svg` | Transparent | Wordmark on a light surface |
6
+ | `logo-dark.svg` | Transparent | Wordmark on a dark surface |
7
+ | `logo-light-background.svg` | Included light panel | Portable light presentation |
8
+ | `logo-dark-background.svg` | Included dark panel | Portable dark presentation |
9
+ | `banner-light.svg` | Included | README and social header on light themes |
10
+ | `banner-dark.svg` | Included | README and social header on dark themes |
11
+
12
+ The mark is a governed core wired to four connector ports; each wire passes through a gate.
13
+ It pairs with the Runtime's execution-graph mark: the Runtime runs agents, Tools connect them to
14
+ the systems they act on, and every connection is governed. Keep the logo aspect ratio and the
15
+ accessible title and description; do not remove the gates or recolor individual ports.
16
+
17
+ Colors follow the Algen palette used by `algen.ai`, Agent Runtime and Agent Studio: gold
18
+ gradients (`#F3D98B` → `#D4A017` → `#B8860B`), warm charcoal (`#0C0C0B` → `#2A2418`), ivory
19
+ surfaces (`#FDFCF9` → `#F4EFE3`), and accessible ink or ivory text for the selected background.