@atmaticai/agent-tools-core 1.0.0
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.
- package/README.md +742 -0
- package/dist/archive/index.d.mts +1 -0
- package/dist/archive/index.d.ts +1 -0
- package/dist/archive/index.js +90 -0
- package/dist/archive/index.js.map +1 -0
- package/dist/archive/index.mjs +80 -0
- package/dist/archive/index.mjs.map +1 -0
- package/dist/color/index.d.mts +1 -0
- package/dist/color/index.d.ts +1 -0
- package/dist/color/index.js +347 -0
- package/dist/color/index.js.map +1 -0
- package/dist/color/index.mjs +336 -0
- package/dist/color/index.mjs.map +1 -0
- package/dist/crypto/index.d.mts +1 -0
- package/dist/crypto/index.d.ts +1 -0
- package/dist/crypto/index.js +116 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/index.mjs +108 -0
- package/dist/crypto/index.mjs.map +1 -0
- package/dist/csv/index.d.mts +1 -0
- package/dist/csv/index.d.ts +1 -0
- package/dist/csv/index.js +371 -0
- package/dist/csv/index.js.map +1 -0
- package/dist/csv/index.mjs +348 -0
- package/dist/csv/index.mjs.map +1 -0
- package/dist/datetime/index.d.mts +1 -0
- package/dist/datetime/index.d.ts +1 -0
- package/dist/datetime/index.js +234 -0
- package/dist/datetime/index.js.map +1 -0
- package/dist/datetime/index.mjs +224 -0
- package/dist/datetime/index.mjs.map +1 -0
- package/dist/diff/index.d.mts +2 -0
- package/dist/diff/index.d.ts +2 -0
- package/dist/diff/index.js +84 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/index.mjs +78 -0
- package/dist/diff/index.mjs.map +1 -0
- package/dist/excel/index.d.mts +1 -0
- package/dist/excel/index.d.ts +1 -0
- package/dist/excel/index.js +163 -0
- package/dist/excel/index.js.map +1 -0
- package/dist/excel/index.mjs +153 -0
- package/dist/excel/index.mjs.map +1 -0
- package/dist/image/index.d.mts +1 -0
- package/dist/image/index.d.ts +1 -0
- package/dist/image/index.js +123 -0
- package/dist/image/index.js.map +1 -0
- package/dist/image/index.mjs +107 -0
- package/dist/image/index.mjs.map +1 -0
- package/dist/index--vbnYfdE.d.mts +142 -0
- package/dist/index--vbnYfdE.d.ts +142 -0
- package/dist/index-7FZQloN-.d.mts +62 -0
- package/dist/index-7FZQloN-.d.ts +62 -0
- package/dist/index-7XgaTVH5.d.mts +93 -0
- package/dist/index-7XgaTVH5.d.ts +93 -0
- package/dist/index-7bvFmh45.d.mts +87 -0
- package/dist/index-7bvFmh45.d.ts +87 -0
- package/dist/index-BDZcIVCU.d.mts +53 -0
- package/dist/index-BDZcIVCU.d.ts +53 -0
- package/dist/index-BN00EnUU.d.mts +55 -0
- package/dist/index-BN00EnUU.d.ts +55 -0
- package/dist/index-CQ1EukC4.d.mts +59 -0
- package/dist/index-CQ1EukC4.d.ts +59 -0
- package/dist/index-CgRVnFOt.d.mts +91 -0
- package/dist/index-CgRVnFOt.d.ts +91 -0
- package/dist/index-DjBDZzuj.d.mts +54 -0
- package/dist/index-DjBDZzuj.d.ts +54 -0
- package/dist/index-FFrvmr-n.d.mts +50 -0
- package/dist/index-FFrvmr-n.d.ts +50 -0
- package/dist/index-QWC8yIgW.d.mts +106 -0
- package/dist/index-QWC8yIgW.d.ts +106 -0
- package/dist/index-RVqNunxE.d.mts +193 -0
- package/dist/index-RVqNunxE.d.ts +193 -0
- package/dist/index-fJD8SORm.d.mts +61 -0
- package/dist/index-fJD8SORm.d.ts +61 -0
- package/dist/index-pPy_XDQU.d.mts +56 -0
- package/dist/index-pPy_XDQU.d.ts +56 -0
- package/dist/index-rwh9hdD9.d.mts +68 -0
- package/dist/index-rwh9hdD9.d.ts +68 -0
- package/dist/index-uXdkAfea.d.mts +93 -0
- package/dist/index-uXdkAfea.d.ts +93 -0
- package/dist/index.d.mts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +3744 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3694 -0
- package/dist/index.mjs.map +1 -0
- package/dist/json/index.d.mts +1 -0
- package/dist/json/index.d.ts +1 -0
- package/dist/json/index.js +599 -0
- package/dist/json/index.js.map +1 -0
- package/dist/json/index.mjs +552 -0
- package/dist/json/index.mjs.map +1 -0
- package/dist/markdown/index.d.mts +1 -0
- package/dist/markdown/index.d.ts +1 -0
- package/dist/markdown/index.js +151 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/index.mjs +139 -0
- package/dist/markdown/index.mjs.map +1 -0
- package/dist/math/index.d.mts +1 -0
- package/dist/math/index.d.ts +1 -0
- package/dist/math/index.js +247 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/index.mjs +240 -0
- package/dist/math/index.mjs.map +1 -0
- package/dist/pdf/index.d.mts +1 -0
- package/dist/pdf/index.d.ts +1 -0
- package/dist/pdf/index.js +546 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/index.mjs +518 -0
- package/dist/pdf/index.mjs.map +1 -0
- package/dist/regex/index.d.mts +1 -0
- package/dist/regex/index.d.ts +1 -0
- package/dist/regex/index.js +93 -0
- package/dist/regex/index.js.map +1 -0
- package/dist/regex/index.mjs +88 -0
- package/dist/regex/index.mjs.map +1 -0
- package/dist/settings/index.d.mts +41 -0
- package/dist/settings/index.d.ts +41 -0
- package/dist/settings/index.js +146 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/index.mjs +139 -0
- package/dist/settings/index.mjs.map +1 -0
- package/dist/sql/index.d.mts +1 -0
- package/dist/sql/index.d.ts +1 -0
- package/dist/sql/index.js +146 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/index.mjs +139 -0
- package/dist/sql/index.mjs.map +1 -0
- package/dist/text/index.d.mts +1 -0
- package/dist/text/index.d.ts +1 -0
- package/dist/text/index.js +250 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/index.mjs +242 -0
- package/dist/text/index.mjs.map +1 -0
- package/dist/xml/index.d.mts +1 -0
- package/dist/xml/index.d.ts +1 -0
- package/dist/xml/index.js +188 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/index.mjs +180 -0
- package/dist/xml/index.mjs.map +1 -0
- package/package.json +150 -0
package/README.md
ADDED
|
@@ -0,0 +1,742 @@
|
|
|
1
|
+
# Agent Tools
|
|
2
|
+
|
|
3
|
+
**Deterministic data transformation and formatting for AI agents.**
|
|
4
|
+
|
|
5
|
+
An open source project by [atmatic.ai](https://atmatic.ai/tools)
|
|
6
|
+
|
|
7
|
+
[](https://github.com/AtmaticAI/agent-tools/actions/workflows/ci.yml)
|
|
8
|
+
[](https://github.com/AtmaticAI/agent-tools/actions/workflows/codeql.yml)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://www.npmjs.com/package/@agent-tools/mcp-server)
|
|
11
|
+
[](https://github.com/AtmaticAI/agent-tools/releases)
|
|
12
|
+
[](https://github.com/AtmaticAI/agent-tools/issues)
|
|
13
|
+
[](https://github.com/AtmaticAI/agent-tools/pulls)
|
|
14
|
+
[](https://github.com/AtmaticAI/agent-tools)
|
|
15
|
+
[](https://github.com/AtmaticAI/agent-tools/graphs/contributors)
|
|
16
|
+
[](https://nodejs.org/)
|
|
17
|
+
[](https://www.typescriptlang.org/)
|
|
18
|
+
[](https://pnpm.io/)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
Agent Tools is an agent-driven data utility platform that provides deterministic tools for transforming, formatting, and inspecting structured data. Designed for MCP and A2A systems, Agent Tools ensures that when agents act, the resulting data is correct, inspectable, and production-ready.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Why Agent Tools?
|
|
27
|
+
|
|
28
|
+
**LLMs think. Agent Tools executes.**
|
|
29
|
+
|
|
30
|
+
While LLMs excel at reasoning and understanding intent, they struggle with:
|
|
31
|
+
|
|
32
|
+
- **Large files** (MB–GB): Token limits cause truncation
|
|
33
|
+
- **Strict correctness**: One missing comma = broken output
|
|
34
|
+
- **Binary formats**: PDF operations require precise byte manipulation
|
|
35
|
+
- **Repeatability**: Enterprise needs deterministic, auditable results
|
|
36
|
+
- **Security**: Air-gapped environments, no data leakage
|
|
37
|
+
|
|
38
|
+
Agent Tools provides the authoritative execution layer that agents can trust.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Live Demo
|
|
43
|
+
|
|
44
|
+
Try Agent Tools instantly without any installation:
|
|
45
|
+
|
|
46
|
+
**[https://tools.atmatic.ai](https://tools.atmatic.ai)**
|
|
47
|
+
|
|
48
|
+
This is a hosted version of the open source code — the same tools, same features, running on managed infrastructure.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Screenshots
|
|
53
|
+
|
|
54
|
+
Browse screenshots of all 16 tools in the [screenshots](./screenshots/) directory:
|
|
55
|
+
|
|
56
|
+
- [Homepage](screenshots/homepage.png)
|
|
57
|
+
- [JSON Studio](screenshots/json-studio.png)
|
|
58
|
+
- [CSV Viewer](screenshots/csv-viewer.png)
|
|
59
|
+
- [PDF Toolkit](screenshots/pdf-toolkit.png)
|
|
60
|
+
- [PDF - Extract Template](screenshots/pdf-to-template.png)
|
|
61
|
+
- [PDF - Generate from Template](screenshots/pdf-from-template.png)
|
|
62
|
+
- [XML Studio](screenshots/xml-studio.png)
|
|
63
|
+
- [Excel Viewer](screenshots/excel-viewer.png)
|
|
64
|
+
- [Image Toolkit](screenshots/image-toolkit.png)
|
|
65
|
+
- [Markdown Studio](screenshots/markdown-studio.png)
|
|
66
|
+
- [Archive Manager](screenshots/archive-manager.png)
|
|
67
|
+
- [Regex Tester](screenshots/regex-tester.png)
|
|
68
|
+
- [Diff & Patch](screenshots/diff-patch.png)
|
|
69
|
+
- [SQL Studio](screenshots/sql-studio.png)
|
|
70
|
+
- [Crypto & Encoding](screenshots/crypto-encoding.png)
|
|
71
|
+
- [Date/Time Tools](screenshots/datetime-tools.png)
|
|
72
|
+
- [Text Utilities](screenshots/text-utilities.png)
|
|
73
|
+
- [Math Utilities](screenshots/math-utilities.png)
|
|
74
|
+
- [Color Utilities](screenshots/color-utilities.png)
|
|
75
|
+
- [Connect (Integration Guide)](screenshots/connect.png)
|
|
76
|
+
- [Settings](screenshots/settings.png)
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Features
|
|
81
|
+
|
|
82
|
+
### JSON Studio
|
|
83
|
+
- Tree view with expand/collapse navigation
|
|
84
|
+
- Format with configurable indentation (2/4/tabs)
|
|
85
|
+
- JSON Schema validation
|
|
86
|
+
- JSONPath/JMESPath queries
|
|
87
|
+
- Convert between JSON, JSON5, JSONC, YAML, TOML
|
|
88
|
+
- Side-by-side diff comparison
|
|
89
|
+
- Deep search with regex
|
|
90
|
+
|
|
91
|
+
### CSV Viewer
|
|
92
|
+
- Virtual scrolling for 100k+ rows
|
|
93
|
+
- Column sort, filter, hide, reorder
|
|
94
|
+
- Auto-detect data types
|
|
95
|
+
- Export to CSV, JSON, Excel
|
|
96
|
+
- Column statistics and distributions
|
|
97
|
+
|
|
98
|
+
### PDF Toolkit
|
|
99
|
+
- Merge multiple PDFs with page selection
|
|
100
|
+
- Split by page ranges
|
|
101
|
+
- Drag-and-drop page reordering
|
|
102
|
+
- Thumbnail previews
|
|
103
|
+
- Rotate, compress, extract text
|
|
104
|
+
- View/edit metadata
|
|
105
|
+
- Extract reusable templates from PDFs (detects `{{placeholder}}` fields)
|
|
106
|
+
- Generate PDFs from templates with data replacement
|
|
107
|
+
|
|
108
|
+
### XML Studio
|
|
109
|
+
- Parse XML to JSON with configurable options
|
|
110
|
+
- Format/pretty-print and minify XML
|
|
111
|
+
- Validate XML structure
|
|
112
|
+
- Query XML with path expressions
|
|
113
|
+
- Convert between XML and JSON
|
|
114
|
+
- XML document statistics (elements, attributes, depth)
|
|
115
|
+
|
|
116
|
+
### Excel Viewer
|
|
117
|
+
- Upload and parse `.xlsx` files
|
|
118
|
+
- View sheet data in tabular format
|
|
119
|
+
- Export to CSV, TSV, JSON
|
|
120
|
+
- Workbook statistics and sheet listing
|
|
121
|
+
- Create Excel files from JSON data
|
|
122
|
+
|
|
123
|
+
### Image Toolkit
|
|
124
|
+
- Resize images with fit options (cover, contain, fill)
|
|
125
|
+
- Convert between PNG, JPEG, WebP, AVIF, TIFF
|
|
126
|
+
- Compress images with quality control
|
|
127
|
+
- Extract EXIF metadata and image stats
|
|
128
|
+
- Rotate, flip, crop, grayscale, blur
|
|
129
|
+
|
|
130
|
+
### Markdown Studio
|
|
131
|
+
- Convert between Markdown, HTML, and plain text
|
|
132
|
+
- Generate table of contents from headings
|
|
133
|
+
- Extract links and frontmatter
|
|
134
|
+
- Document statistics (words, headings, links, images)
|
|
135
|
+
|
|
136
|
+
### Archive Manager
|
|
137
|
+
- Upload and inspect ZIP archives
|
|
138
|
+
- List archive contents with sizes
|
|
139
|
+
- Extract files from archives
|
|
140
|
+
- Archive statistics (file count, total/compressed size)
|
|
141
|
+
|
|
142
|
+
### Regex Tester
|
|
143
|
+
- Test regex patterns against text with live matching
|
|
144
|
+
- Search and replace with regex
|
|
145
|
+
- Extract matching groups and captures
|
|
146
|
+
- Validate regex pattern syntax
|
|
147
|
+
- Configurable flags (global, case-insensitive, multiline)
|
|
148
|
+
|
|
149
|
+
### Diff & Patch
|
|
150
|
+
- Compare texts at line, word, or character level
|
|
151
|
+
- Generate unified diff format
|
|
152
|
+
- Apply patches to source text
|
|
153
|
+
- Diff statistics (additions, deletions, unchanged)
|
|
154
|
+
|
|
155
|
+
### SQL Studio
|
|
156
|
+
- Format and pretty-print SQL queries
|
|
157
|
+
- Minify SQL
|
|
158
|
+
- Validate SQL syntax
|
|
159
|
+
- Parse SQL to AST
|
|
160
|
+
- Convert between dialects (PostgreSQL, MySQL, SQLite, TransactSQL, BigQuery)
|
|
161
|
+
- Query statistics (tables, columns, joins)
|
|
162
|
+
|
|
163
|
+
### Crypto & Encoding
|
|
164
|
+
- Hash text with MD5, SHA-1, SHA-256, SHA-384, SHA-512
|
|
165
|
+
- Encode/decode Base64, Hex, URL, HTML
|
|
166
|
+
- Decode JWT tokens (header + payload)
|
|
167
|
+
- Generate cryptographically secure UUID v4
|
|
168
|
+
- HMAC signatures and file checksums
|
|
169
|
+
|
|
170
|
+
### Date/Time Tools
|
|
171
|
+
- Parse date strings and timestamps
|
|
172
|
+
- Format dates with custom patterns
|
|
173
|
+
- Date arithmetic (add/subtract days, hours, etc.)
|
|
174
|
+
- Calculate differences between dates
|
|
175
|
+
- Convert between timezones
|
|
176
|
+
- Parse and explain cron expressions
|
|
177
|
+
|
|
178
|
+
### Text Utilities
|
|
179
|
+
- Convert text case (upper, lower, title, sentence, camel, snake, kebab)
|
|
180
|
+
- Generate URL-friendly slugs
|
|
181
|
+
- Generate lorem ipsum placeholder text
|
|
182
|
+
- Calculate text similarity (Levenshtein distance)
|
|
183
|
+
- Text statistics (characters, words, sentences, paragraphs)
|
|
184
|
+
- Render mustache-style templates
|
|
185
|
+
- Truncate text with ellipsis options
|
|
186
|
+
|
|
187
|
+
### Math Utilities
|
|
188
|
+
- Convert between number bases (binary, octal, decimal, hex)
|
|
189
|
+
- Unit conversion (length, weight, temperature, data size)
|
|
190
|
+
- Number formatting with locale support
|
|
191
|
+
- Percentage calculations
|
|
192
|
+
- Statistical functions (mean, median, mode, std dev, variance)
|
|
193
|
+
|
|
194
|
+
### Color Utilities
|
|
195
|
+
- Parse colors from various formats (hex, rgb, hsl, named)
|
|
196
|
+
- Convert between color formats
|
|
197
|
+
- Check WCAG contrast ratios for accessibility
|
|
198
|
+
- Blend and mix colors
|
|
199
|
+
- Generate color palettes (complementary, triadic, analogous)
|
|
200
|
+
- Get nearest named color
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Agent Integration
|
|
205
|
+
|
|
206
|
+
Agent Tools supports three integration patterns:
|
|
207
|
+
|
|
208
|
+
### 1. MCP (Model Context Protocol)
|
|
209
|
+
|
|
210
|
+
Expose tools to Claude Desktop, Claude Code, or any MCP-compatible client.
|
|
211
|
+
|
|
212
|
+
**Supported transports:**
|
|
213
|
+
- **stdio** - For local process communication
|
|
214
|
+
- **SSE** - Server-Sent Events for web clients
|
|
215
|
+
- **HTTP Streaming** - Streamable HTTP for scalable deployments
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
// claude_desktop_config.json
|
|
219
|
+
{
|
|
220
|
+
"mcpServers": {
|
|
221
|
+
"agent-tools": {
|
|
222
|
+
"command": "npx",
|
|
223
|
+
"args": ["@agent-tools/mcp-server"]
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Available MCP Tools (100):**
|
|
230
|
+
|
|
231
|
+
<details>
|
|
232
|
+
<summary><strong>View all MCP tools</strong></summary>
|
|
233
|
+
|
|
234
|
+
| Tool | Description |
|
|
235
|
+
|------|-------------|
|
|
236
|
+
| **JSON** | |
|
|
237
|
+
| `agent_tools_json_format` | Format JSON with options |
|
|
238
|
+
| `agent_tools_json_validate` | Validate against JSON Schema |
|
|
239
|
+
| `agent_tools_json_query` | Query with JSONPath/JMESPath |
|
|
240
|
+
| `agent_tools_json_convert` | Convert between formats |
|
|
241
|
+
| `agent_tools_json_diff` | Compare two JSON documents |
|
|
242
|
+
| **CSV** | |
|
|
243
|
+
| `agent_tools_csv_parse` | Parse CSV to structured data |
|
|
244
|
+
| `agent_tools_csv_to_json` | Convert CSV to JSON |
|
|
245
|
+
| `agent_tools_csv_filter` | Filter CSV rows |
|
|
246
|
+
| `agent_tools_csv_stats` | Get column statistics |
|
|
247
|
+
| **PDF** | |
|
|
248
|
+
| `agent_tools_pdf_merge` | Merge PDF files |
|
|
249
|
+
| `agent_tools_pdf_split` | Split PDF by ranges |
|
|
250
|
+
| `agent_tools_pdf_extract_text` | Extract text from PDF |
|
|
251
|
+
| `agent_tools_pdf_metadata` | Get/set PDF metadata |
|
|
252
|
+
| `agent_tools_pdf_to_template` | Extract reusable template from PDF |
|
|
253
|
+
| `agent_tools_pdf_from_template` | Generate PDF from template + data |
|
|
254
|
+
| **XML** | |
|
|
255
|
+
| `agent_tools_xml_parse` | Parse XML to JSON |
|
|
256
|
+
| `agent_tools_xml_format` | Format/pretty-print XML |
|
|
257
|
+
| `agent_tools_xml_minify` | Minify XML |
|
|
258
|
+
| `agent_tools_xml_validate` | Validate XML structure |
|
|
259
|
+
| `agent_tools_xml_query` | Query XML with path expressions |
|
|
260
|
+
| `agent_tools_xml_convert` | Convert between XML and JSON |
|
|
261
|
+
| `agent_tools_xml_stats` | Get XML statistics |
|
|
262
|
+
| **Excel** | |
|
|
263
|
+
| `agent_tools_excel_parse` | Parse Excel to structured data |
|
|
264
|
+
| `agent_tools_excel_convert` | Convert to JSON/CSV/TSV |
|
|
265
|
+
| `agent_tools_excel_stats` | Get workbook statistics |
|
|
266
|
+
| `agent_tools_excel_sheets` | List sheet names and info |
|
|
267
|
+
| `agent_tools_excel_create` | Create Excel from JSON data |
|
|
268
|
+
| **Image** | |
|
|
269
|
+
| `agent_tools_image_resize` | Resize images |
|
|
270
|
+
| `agent_tools_image_crop` | Crop images to region |
|
|
271
|
+
| `agent_tools_image_convert` | Convert between formats |
|
|
272
|
+
| `agent_tools_image_compress` | Compress images |
|
|
273
|
+
| `agent_tools_image_rotate` | Rotate images |
|
|
274
|
+
| `agent_tools_image_metadata` | Extract image metadata |
|
|
275
|
+
| `agent_tools_image_grayscale` | Convert to grayscale |
|
|
276
|
+
| **Markdown** | |
|
|
277
|
+
| `agent_tools_markdown_convert` | Convert Markdown/HTML/text |
|
|
278
|
+
| `agent_tools_markdown_toc` | Generate table of contents |
|
|
279
|
+
| `agent_tools_markdown_links` | Extract all links |
|
|
280
|
+
| `agent_tools_markdown_frontmatter` | Extract frontmatter |
|
|
281
|
+
| `agent_tools_markdown_stats` | Get document statistics |
|
|
282
|
+
| **Archive** | |
|
|
283
|
+
| `agent_tools_archive_create` | Create ZIP archives |
|
|
284
|
+
| `agent_tools_archive_extract` | Extract archive contents |
|
|
285
|
+
| `agent_tools_archive_list` | List archive entries |
|
|
286
|
+
| `agent_tools_archive_stats` | Get archive statistics |
|
|
287
|
+
| **Regex** | |
|
|
288
|
+
| `agent_tools_regex_test` | Test pattern against text |
|
|
289
|
+
| `agent_tools_regex_replace` | Search and replace with regex |
|
|
290
|
+
| `agent_tools_regex_extract` | Extract matching groups |
|
|
291
|
+
| `agent_tools_regex_validate` | Validate regex syntax |
|
|
292
|
+
| **Diff** | |
|
|
293
|
+
| `agent_tools_diff_compare` | Compare texts (line/word/char) |
|
|
294
|
+
| `agent_tools_diff_unified` | Generate unified diff |
|
|
295
|
+
| `agent_tools_diff_apply` | Apply patches |
|
|
296
|
+
| **SQL** | |
|
|
297
|
+
| `agent_tools_sql_format` | Format SQL queries |
|
|
298
|
+
| `agent_tools_sql_minify` | Minify SQL |
|
|
299
|
+
| `agent_tools_sql_parse` | Parse SQL to AST |
|
|
300
|
+
| `agent_tools_sql_validate` | Validate SQL syntax |
|
|
301
|
+
| `agent_tools_sql_convert` | Convert between dialects |
|
|
302
|
+
| `agent_tools_sql_stats` | Get query statistics |
|
|
303
|
+
| **Crypto & Encoding** | |
|
|
304
|
+
| `agent_tools_crypto_hash` | Hash text (MD5, SHA-256, etc.) |
|
|
305
|
+
| `agent_tools_crypto_hmac` | Generate HMAC signatures |
|
|
306
|
+
| `agent_tools_crypto_encode` | Encode (Base64, Hex, URL, HTML) |
|
|
307
|
+
| `agent_tools_crypto_decode` | Decode encoded text |
|
|
308
|
+
| `agent_tools_crypto_jwt_decode` | Decode JWT tokens |
|
|
309
|
+
| `agent_tools_crypto_uuid` | Generate UUID v4 |
|
|
310
|
+
| `agent_tools_crypto_checksum` | Compute file checksums |
|
|
311
|
+
| **Date/Time** | |
|
|
312
|
+
| `agent_tools_datetime_parse` | Parse date strings |
|
|
313
|
+
| `agent_tools_datetime_format` | Format dates |
|
|
314
|
+
| `agent_tools_datetime_now` | Get current date/time |
|
|
315
|
+
| `agent_tools_datetime_add` | Add duration to dates |
|
|
316
|
+
| `agent_tools_datetime_subtract` | Subtract duration |
|
|
317
|
+
| `agent_tools_datetime_diff` | Calculate date differences |
|
|
318
|
+
| `agent_tools_datetime_timezone_convert` | Convert timezones |
|
|
319
|
+
| `agent_tools_datetime_cron` | Parse cron expressions |
|
|
320
|
+
| `agent_tools_datetime_timezones` | List all timezones |
|
|
321
|
+
| **Text** | |
|
|
322
|
+
| `agent_tools_text_case` | Convert text case |
|
|
323
|
+
| `agent_tools_text_slugify` | Generate URL slugs |
|
|
324
|
+
| `agent_tools_text_lorem` | Generate lorem ipsum |
|
|
325
|
+
| `agent_tools_text_similarity` | Calculate text similarity |
|
|
326
|
+
| `agent_tools_text_stats` | Get text statistics |
|
|
327
|
+
| `agent_tools_text_template` | Render text templates |
|
|
328
|
+
| `agent_tools_text_truncate` | Truncate text |
|
|
329
|
+
| **Math** | |
|
|
330
|
+
| `agent_tools_math_base` | Convert number bases |
|
|
331
|
+
| `agent_tools_math_convert` | Convert units |
|
|
332
|
+
| `agent_tools_math_format` | Format numbers |
|
|
333
|
+
| `agent_tools_math_percentage` | Calculate percentages |
|
|
334
|
+
| `agent_tools_math_statistics` | Calculate statistics |
|
|
335
|
+
| **Color** | |
|
|
336
|
+
| `agent_tools_color_parse` | Parse color strings |
|
|
337
|
+
| `agent_tools_color_convert` | Convert color formats |
|
|
338
|
+
| `agent_tools_color_contrast` | Check contrast ratio |
|
|
339
|
+
| `agent_tools_color_blend` | Blend colors |
|
|
340
|
+
| `agent_tools_color_palette` | Generate palettes |
|
|
341
|
+
| `agent_tools_color_name` | Get color name |
|
|
342
|
+
|
|
343
|
+
</details>
|
|
344
|
+
|
|
345
|
+
### 2. A2A (Agent-to-Agent Protocol)
|
|
346
|
+
|
|
347
|
+
Agent Tools exposes an A2A-compliant agent for inter-agent communication.
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
# Discover agent capabilities
|
|
351
|
+
curl https://your-agent-tools-instance/.well-known/agent.json
|
|
352
|
+
|
|
353
|
+
# Create a task
|
|
354
|
+
curl -X POST https://your-agent-tools-instance/a2a/tasks \
|
|
355
|
+
-H "Content-Type: application/json" \
|
|
356
|
+
-d '{"skill": "json-operations", "input": {"action": "format", "data": "..."}}'
|
|
357
|
+
|
|
358
|
+
# Poll for result
|
|
359
|
+
curl https://your-agent-tools-instance/a2a/tasks/{task_id}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### 3. REST API
|
|
363
|
+
|
|
364
|
+
Direct HTTP access to all tools. No external API keys or services required — everything runs locally.
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
# Format JSON
|
|
368
|
+
curl -X POST /api/json/format \
|
|
369
|
+
-H "Content-Type: application/json" \
|
|
370
|
+
-d '{"input": "{\"a\":1}", "options": {"indent": 2}}'
|
|
371
|
+
|
|
372
|
+
# Format SQL
|
|
373
|
+
curl -X POST /api/sql/format \
|
|
374
|
+
-H "Content-Type: application/json" \
|
|
375
|
+
-d '{"input": "SELECT * FROM users WHERE active=true", "dialect": "postgresql"}'
|
|
376
|
+
|
|
377
|
+
# Hash text
|
|
378
|
+
curl -X POST /api/crypto/hash \
|
|
379
|
+
-H "Content-Type: application/json" \
|
|
380
|
+
-d '{"input": "hello world", "algorithm": "sha256"}'
|
|
381
|
+
|
|
382
|
+
# Parse date
|
|
383
|
+
curl -X POST /api/datetime/parse \
|
|
384
|
+
-H "Content-Type: application/json" \
|
|
385
|
+
-d '{"input": "2024-01-15T10:30:00Z", "timezone": "America/New_York"}'
|
|
386
|
+
|
|
387
|
+
# Test regex
|
|
388
|
+
curl -X POST /api/regex/test \
|
|
389
|
+
-H "Content-Type: application/json" \
|
|
390
|
+
-d '{"input": "hello world", "pattern": "\\w+", "flags": "g"}'
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**Available REST endpoints:** `/api/{tool}/{action}` where tool is one of: `json`, `csv`, `pdf`, `xml`, `excel`, `image`, `markdown`, `archive`, `regex`, `diff`, `sql`, `crypto`, `datetime`, `text`, `math`, `color`.
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Installation
|
|
398
|
+
|
|
399
|
+
### Prerequisites
|
|
400
|
+
|
|
401
|
+
- Node.js 20+
|
|
402
|
+
- pnpm 9+
|
|
403
|
+
|
|
404
|
+
### Local Development
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
# Clone the repository
|
|
408
|
+
git clone git@github.com:AtmaticAI/agent-tools.git
|
|
409
|
+
cd agent-tools
|
|
410
|
+
|
|
411
|
+
# Install dependencies
|
|
412
|
+
pnpm install
|
|
413
|
+
|
|
414
|
+
# Start development server
|
|
415
|
+
pnpm dev
|
|
416
|
+
|
|
417
|
+
# Start specific services
|
|
418
|
+
pnpm dev:web # Web UI only
|
|
419
|
+
pnpm dev:mcp # MCP server only
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### Docker
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
# Full platform (Web + MCP + A2A)
|
|
426
|
+
docker-compose up -d
|
|
427
|
+
|
|
428
|
+
# Web UI only
|
|
429
|
+
docker run -p 3000:3000 ghcr.io/AtmaticAI/agent-tools:latest
|
|
430
|
+
|
|
431
|
+
# MCP server only
|
|
432
|
+
docker run ghcr.io/AtmaticAI/agent-tools:mcp
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
#### Docker Compose
|
|
436
|
+
|
|
437
|
+
```yaml
|
|
438
|
+
version: '3.8'
|
|
439
|
+
services:
|
|
440
|
+
agent-tools:
|
|
441
|
+
image: ghcr.io/AtmaticAI/agent-tools:latest
|
|
442
|
+
ports:
|
|
443
|
+
- "3000:3000" # Web UI
|
|
444
|
+
- "3001:3001" # MCP HTTP Streaming
|
|
445
|
+
volumes:
|
|
446
|
+
- ./data:/app/data # Persist runtime settings
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Kubernetes
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
# Apply manifests
|
|
453
|
+
kubectl apply -f k8s/
|
|
454
|
+
|
|
455
|
+
# Verify deployment
|
|
456
|
+
kubectl get pods -n agent-tools
|
|
457
|
+
kubectl get svc -n agent-tools
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
#### Kubernetes Manifests
|
|
461
|
+
|
|
462
|
+
The `k8s/` directory includes:
|
|
463
|
+
- `namespace.yaml` - Agent Tools namespace
|
|
464
|
+
- `configmap.yaml` - Configuration
|
|
465
|
+
- `deployment.yaml` - Main deployment
|
|
466
|
+
- `service.yaml` - ClusterIP service
|
|
467
|
+
- `ingress.yaml` - Ingress with TLS
|
|
468
|
+
- `hpa.yaml` - Horizontal Pod Autoscaler
|
|
469
|
+
|
|
470
|
+
### AWS (ECS/Fargate)
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
cd terraform
|
|
474
|
+
|
|
475
|
+
# Initialize Terraform
|
|
476
|
+
terraform init
|
|
477
|
+
|
|
478
|
+
# Review the plan
|
|
479
|
+
terraform plan
|
|
480
|
+
|
|
481
|
+
# Deploy
|
|
482
|
+
terraform apply
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
#### Terraform Resources
|
|
486
|
+
|
|
487
|
+
- **ECR** - Container registry
|
|
488
|
+
- **ECS Cluster** - Fargate cluster
|
|
489
|
+
- **ECS Service** - Auto-scaled service
|
|
490
|
+
- **ALB** - Application Load Balancer
|
|
491
|
+
- **CloudWatch** - Logging and metrics
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## Configuration
|
|
496
|
+
|
|
497
|
+
### Environment Variables
|
|
498
|
+
|
|
499
|
+
| Variable | Default | Description |
|
|
500
|
+
|----------|---------|-------------|
|
|
501
|
+
| `PORT` | `3000` | Web server port |
|
|
502
|
+
| `MCP_PORT` | `3001` | MCP HTTP streaming port |
|
|
503
|
+
| `MCP_TRANSPORT` | `stdio` | MCP transport: `stdio`, `sse`, `http` |
|
|
504
|
+
|
|
505
|
+
Tool categories (JSON, CSV, PDF, XML, Excel, Image, Markdown, Archive, Regex, Diff, SQL, Crypto, DateTime) are configured at runtime via the **Settings** page (`/settings`). All tools are enabled by default. Settings are persisted to `data/settings.json`.
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## MCP Server
|
|
510
|
+
|
|
511
|
+
### Installation
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
# Global install
|
|
515
|
+
npm install -g @agent-tools/mcp-server
|
|
516
|
+
|
|
517
|
+
# Or run directly
|
|
518
|
+
npx @agent-tools/mcp-server
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### Transport Options
|
|
522
|
+
|
|
523
|
+
#### stdio (default)
|
|
524
|
+
For Claude Desktop and local integrations:
|
|
525
|
+
|
|
526
|
+
```json
|
|
527
|
+
{
|
|
528
|
+
"mcpServers": {
|
|
529
|
+
"agent-tools": {
|
|
530
|
+
"command": "npx",
|
|
531
|
+
"args": ["@agent-tools/mcp-server"]
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
#### SSE (Server-Sent Events)
|
|
538
|
+
For web-based MCP clients:
|
|
539
|
+
|
|
540
|
+
```bash
|
|
541
|
+
npx @agent-tools/mcp-server --transport sse --port 3001
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
#### HTTP Streaming
|
|
545
|
+
For scalable, stateless deployments:
|
|
546
|
+
|
|
547
|
+
```bash
|
|
548
|
+
npx @agent-tools/mcp-server --transport http --port 3001
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
Connect via:
|
|
552
|
+
```
|
|
553
|
+
POST http://localhost:3001/mcp
|
|
554
|
+
Content-Type: application/json
|
|
555
|
+
|
|
556
|
+
{"jsonrpc": "2.0", "method": "tools/list", "id": 1}
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## A2A Agent
|
|
562
|
+
|
|
563
|
+
### Agent Card
|
|
564
|
+
|
|
565
|
+
The A2A agent card is available at `/.well-known/agent.json`:
|
|
566
|
+
|
|
567
|
+
```json
|
|
568
|
+
{
|
|
569
|
+
"name": "Agent Tools Data Agent",
|
|
570
|
+
"description": "Deterministic data transformation and document processing",
|
|
571
|
+
"version": "1.0.0",
|
|
572
|
+
"provider": {
|
|
573
|
+
"organization": "atmatic.ai",
|
|
574
|
+
"url": "https://atmatic.ai"
|
|
575
|
+
},
|
|
576
|
+
"capabilities": {
|
|
577
|
+
"streaming": true,
|
|
578
|
+
"pushNotifications": false
|
|
579
|
+
},
|
|
580
|
+
"skills": [
|
|
581
|
+
{ "id": "json-operations", "name": "JSON Processing" },
|
|
582
|
+
{ "id": "csv-operations", "name": "CSV Processing" },
|
|
583
|
+
{ "id": "pdf-operations", "name": "PDF Processing" },
|
|
584
|
+
{ "id": "xml-operations", "name": "XML Processing" },
|
|
585
|
+
{ "id": "excel-operations", "name": "Excel Processing" },
|
|
586
|
+
{ "id": "image-operations", "name": "Image Processing" },
|
|
587
|
+
{ "id": "markdown-operations", "name": "Markdown Processing" },
|
|
588
|
+
{ "id": "archive-operations", "name": "Archive Management" },
|
|
589
|
+
{ "id": "regex-operations", "name": "Regex Operations" },
|
|
590
|
+
{ "id": "diff-operations", "name": "Diff & Patch" },
|
|
591
|
+
{ "id": "sql-operations", "name": "SQL Processing" },
|
|
592
|
+
{ "id": "crypto-operations", "name": "Crypto & Encoding" },
|
|
593
|
+
{ "id": "datetime-operations", "name": "Date/Time Operations" },
|
|
594
|
+
{ "id": "text-operations", "name": "Text Processing" },
|
|
595
|
+
{ "id": "math-operations", "name": "Math Operations" },
|
|
596
|
+
{ "id": "color-operations", "name": "Color Operations" }
|
|
597
|
+
]
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### Task Lifecycle
|
|
602
|
+
|
|
603
|
+
```
|
|
604
|
+
POST /a2a/tasks → Create task (returns task_id)
|
|
605
|
+
GET /a2a/tasks/:id → Get task status/result
|
|
606
|
+
POST /a2a/tasks/:id/cancel → Cancel task
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## Coming Soon: a2ui.org Integration
|
|
612
|
+
|
|
613
|
+
[a2ui.org](https://a2ui.org) is an emerging standard for agent user interfaces. Agent Tools will integrate as a data transformation provider within the a2ui ecosystem.
|
|
614
|
+
|
|
615
|
+
### Planned Features
|
|
616
|
+
- **Direct Connection**: Register Agent Tools as a tool provider in a2ui-compatible agents
|
|
617
|
+
- **Seamless Handoffs**: Pass data between a2ui agents and Agent Tools tools
|
|
618
|
+
- **Visual Workflows**: Chain all 16 tool categories in visual pipelines
|
|
619
|
+
|
|
620
|
+
Stay tuned for updates on [GitHub](https://github.com/AtmaticAI/agent-tools).
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
## Project Structure
|
|
625
|
+
|
|
626
|
+
```
|
|
627
|
+
agent-tools/
|
|
628
|
+
├── apps/
|
|
629
|
+
│ └── web/ # Next.js 15 application
|
|
630
|
+
│ ├── app/
|
|
631
|
+
│ │ ├── (dashboard)/ # Tool UI pages (16 tools)
|
|
632
|
+
│ │ │ ├── json/ # JSON Studio
|
|
633
|
+
│ │ │ ├── csv/ # CSV Viewer
|
|
634
|
+
│ │ │ ├── pdf/ # PDF Toolkit
|
|
635
|
+
│ │ │ ├── xml/ # XML Studio
|
|
636
|
+
│ │ │ ├── excel/ # Excel Viewer
|
|
637
|
+
│ │ │ ├── image/ # Image Toolkit
|
|
638
|
+
│ │ │ ├── markdown/ # Markdown Studio
|
|
639
|
+
│ │ │ ├── archive/ # Archive Manager
|
|
640
|
+
│ │ │ ├── regex/ # Regex Tester
|
|
641
|
+
│ │ │ ├── diff/ # Diff & Patch
|
|
642
|
+
│ │ │ ├── sql/ # SQL Studio
|
|
643
|
+
│ │ │ ├── crypto/ # Crypto & Encoding
|
|
644
|
+
│ │ │ ├── datetime/ # Date/Time Tools
|
|
645
|
+
│ │ │ ├── connect/ # Integration guide
|
|
646
|
+
│ │ │ └── settings/ # Runtime tool settings
|
|
647
|
+
│ │ └── api/ # REST API routes
|
|
648
|
+
│ ├── components/ # React components (shadcn/ui)
|
|
649
|
+
│ └── lib/ # Utilities and stores
|
|
650
|
+
├── packages/
|
|
651
|
+
│ ├── core/ # Shared business logic (16 modules)
|
|
652
|
+
│ ├── mcp-server/ # MCP server (100 tools)
|
|
653
|
+
│ └── a2a-agent/ # A2A agent (16 skills)
|
|
654
|
+
├── docker/ # Docker configurations
|
|
655
|
+
├── k8s/ # Kubernetes manifests
|
|
656
|
+
├── terraform/ # AWS infrastructure
|
|
657
|
+
└── .github/workflows/ # CI/CD pipelines
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
## Development
|
|
663
|
+
|
|
664
|
+
### Commands
|
|
665
|
+
|
|
666
|
+
```bash
|
|
667
|
+
pnpm dev # Start all services
|
|
668
|
+
pnpm build # Build all packages
|
|
669
|
+
pnpm test # Run tests
|
|
670
|
+
pnpm lint # Lint code
|
|
671
|
+
pnpm typecheck # Type check
|
|
672
|
+
pnpm format # Format code
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### Testing
|
|
676
|
+
|
|
677
|
+
```bash
|
|
678
|
+
# Unit tests
|
|
679
|
+
pnpm test
|
|
680
|
+
|
|
681
|
+
# E2E tests
|
|
682
|
+
pnpm test:e2e
|
|
683
|
+
|
|
684
|
+
# Coverage
|
|
685
|
+
pnpm test -- --coverage
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## Managed Solution
|
|
691
|
+
|
|
692
|
+
Looking for a hosted, fully managed version of Agent Tools without the hassle of self-hosting?
|
|
693
|
+
|
|
694
|
+
**[Atmatic.ai](https://atmatic.ai)** offers a managed platform with enterprise-grade features including team collaboration, usage analytics, priority support, and guaranteed uptime — so you can focus on building agents, not infrastructure.
|
|
695
|
+
|
|
696
|
+
### Open Source vs Managed Platform
|
|
697
|
+
|
|
698
|
+
| Feature | Open Source | Managed Platform |
|
|
699
|
+
|---------|-------------|------------------|
|
|
700
|
+
| All 16 tool categories | Yes | Yes |
|
|
701
|
+
| MCP / A2A / REST APIs | Yes | Yes |
|
|
702
|
+
| Self-hosted | Yes | No (cloud-hosted) |
|
|
703
|
+
| Automatic updates | Manual | Yes |
|
|
704
|
+
| Team collaboration | - | Yes |
|
|
705
|
+
| Usage analytics | - | Yes |
|
|
706
|
+
| Priority support | Community | Dedicated |
|
|
707
|
+
| SLA & uptime guarantee | - | Yes |
|
|
708
|
+
|
|
709
|
+
**[See full comparison →](https://atmatic.ai/tools)**
|
|
710
|
+
|
|
711
|
+
**[Contact us for enterprise pricing →](https://atmatic.ai/#contact-us)**
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
## Contributing
|
|
716
|
+
|
|
717
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
718
|
+
|
|
719
|
+
---
|
|
720
|
+
|
|
721
|
+
## License
|
|
722
|
+
|
|
723
|
+
Apache 2.0 License - see [LICENSE](./LICENSE) for details.
|
|
724
|
+
|
|
725
|
+
---
|
|
726
|
+
|
|
727
|
+
## Links
|
|
728
|
+
|
|
729
|
+
- **Live Demo**: [tools.atmatic.ai](https://tools.atmatic.ai)
|
|
730
|
+
- **Repository**: [github.com/AtmaticAI/agent-tools](https://github.com/AtmaticAI/agent-tools)
|
|
731
|
+
- **Organization**: [atmatic.ai](https://atmatic.ai)
|
|
732
|
+
- **Managed Platform**: [atmatic.ai/tools](https://atmatic.ai/tools)
|
|
733
|
+
- **Issues**: [github.com/AtmaticAI/agent-tools/issues](https://github.com/AtmaticAI/agent-tools/issues)
|
|
734
|
+
- **Contact**: [atmatic.ai/#contact-us](https://atmatic.ai/#contact-us)
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
<p align="center">
|
|
739
|
+
<strong>Agent Tools</strong> — An open source project by <a href="https://atmatic.ai">atmatic.ai</a>
|
|
740
|
+
<br>
|
|
741
|
+
<sub>Building trust through transparency</sub>
|
|
742
|
+
</p>
|