matimo 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +651 -0
- package/dist/auth/oauth2-config.d.ts +104 -0
- package/dist/auth/oauth2-config.d.ts.map +1 -0
- package/dist/auth/oauth2-config.js +38 -0
- package/dist/auth/oauth2-config.js.map +1 -0
- package/dist/auth/oauth2-handler.d.ts +130 -0
- package/dist/auth/oauth2-handler.d.ts.map +1 -0
- package/dist/auth/oauth2-handler.js +265 -0
- package/dist/auth/oauth2-handler.js.map +1 -0
- package/dist/auth/oauth2-provider-loader.d.ts +68 -0
- package/dist/auth/oauth2-provider-loader.d.ts.map +1 -0
- package/dist/auth/oauth2-provider-loader.js +120 -0
- package/dist/auth/oauth2-provider-loader.js.map +1 -0
- package/dist/core/schema.d.ts +238 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +168 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/tool-loader.d.ts +29 -0
- package/dist/core/tool-loader.d.ts.map +1 -0
- package/dist/core/tool-loader.js +98 -0
- package/dist/core/tool-loader.js.map +1 -0
- package/dist/core/tool-registry.d.ts +48 -0
- package/dist/core/tool-registry.d.ts.map +1 -0
- package/dist/core/tool-registry.js +89 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/core/types.d.ts +143 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +2 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/tool-decorator.d.ts +97 -0
- package/dist/decorators/tool-decorator.d.ts.map +1 -0
- package/dist/decorators/tool-decorator.js +154 -0
- package/dist/decorators/tool-decorator.js.map +1 -0
- package/dist/encodings/parameter-encoding.d.ts +51 -0
- package/dist/encodings/parameter-encoding.d.ts.map +1 -0
- package/dist/encodings/parameter-encoding.js +116 -0
- package/dist/encodings/parameter-encoding.js.map +1 -0
- package/dist/errors/matimo-error.d.ts +34 -0
- package/dist/errors/matimo-error.d.ts.map +1 -0
- package/dist/errors/matimo-error.js +49 -0
- package/dist/errors/matimo-error.js.map +1 -0
- package/dist/executors/command-executor.d.ts +19 -0
- package/dist/executors/command-executor.d.ts.map +1 -0
- package/dist/executors/command-executor.js +94 -0
- package/dist/executors/command-executor.js.map +1 -0
- package/dist/executors/http-executor.d.ts +26 -0
- package/dist/executors/http-executor.d.ts.map +1 -0
- package/dist/executors/http-executor.js +133 -0
- package/dist/executors/http-executor.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/matimo-instance.d.ts +98 -0
- package/dist/matimo-instance.d.ts.map +1 -0
- package/dist/matimo-instance.js +260 -0
- package/dist/matimo-instance.js.map +1 -0
- package/docs/Gemfile +5 -0
- package/docs/RELEASES.md +69 -0
- package/docs/ROADMAP.md +138 -0
- package/docs/_config.yml +27 -0
- package/docs/api-reference/ERRORS.md +445 -0
- package/docs/api-reference/SDK.md +582 -0
- package/docs/api-reference/TYPES.md +415 -0
- package/docs/architecture/OAUTH.md +1366 -0
- package/docs/architecture/OVERVIEW.md +564 -0
- package/docs/assets/logo.png +0 -0
- package/docs/community/COMMIT_GUIDELINES.md +552 -0
- package/docs/framework-integrations/LANGCHAIN.md +286 -0
- package/docs/getting-started/QUICK_START.md +211 -0
- package/docs/getting-started/YOUR_FIRST_TOOL.md +217 -0
- package/docs/getting-started/installation.md +124 -0
- package/docs/index.md +288 -0
- package/docs/tool-development/DECORATOR_GUIDE.md +633 -0
- package/docs/tool-development/OAUTH_LINK.md +5 -0
- package/docs/tool-development/PROVIDER_CONFIGURATION.md +458 -0
- package/docs/tool-development/TESTING.md +412 -0
- package/docs/tool-development/TOOL_SPECIFICATION.md +793 -0
- package/docs/tool-development/YAML_TOOLS.md +65 -0
- package/docs/troubleshooting/FAQ.md +391 -0
- package/docs/user-guide/AUTHENTICATION.md +255 -0
- package/docs/user-guide/DEVELOPMENT_STANDARDS.md +698 -0
- package/docs/user-guide/SDK_PATTERNS.md +316 -0
- package/docs/user-guide/TOOL_DISCOVERY.md +209 -0
- package/package.json +96 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tallclub
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,651 @@
|
|
|
1
|
+
# Matimo — Toolbox For AI Agents
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="./docs/assets/logo.png" alt="Matimo Logo" width="300" />
|
|
5
|
+
</p>
|
|
6
|
+
<p align="center">
|
|
7
|
+
<strong>Matimo - "to be powerful"</strong>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://github.com/tallclub/matimo/actions/workflows/ci.yml?branch=main"><img src="https://img.shields.io/github/actions/workflow/status/tallclub/matimo/ci.yml?branch=main&style=for-the-badge" alt="CI status"></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/matimo"><img src="https://img.shields.io/npm/v/matimo.svg?style=for-the-badge" alt="npm version"></a>
|
|
13
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge" alt="MIT License"></a>
|
|
14
|
+
<a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-5.9+-blue?style=for-the-badge" alt="TypeScript"></a>
|
|
15
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-18+-green?style=for-the-badge" alt="Node.js"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
**Matimo** is a universal, configuration-driven AI tools ecosystem accessible through **multiple integration paths**. Define tools **once in YAML** and access them via SDK, MCP server, CLI, or HTTP — across any AI framework or agent system.
|
|
19
|
+
|
|
20
|
+
If you want tools that feel **fast, maintainable, and framework-agnostic**, this is it.
|
|
21
|
+
|
|
22
|
+
[Documentation](./docs) · [Getting Started](./docs/getting-started/QUICK_START.md) · [API Reference](./docs/api-reference/SDK.md) · [Tool Spec](./docs/tool-development/TOOL_SPECIFICATION.md) · [GitHub](https://github.com/tallclub/matimo) · [Why Matimo?](#why-matimo)
|
|
23
|
+
|
|
24
|
+
## Quick Start (TL;DR)
|
|
25
|
+
|
|
26
|
+
Runtime: **Node ≥18**, **pnpm 8.15+**
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Clone and install
|
|
30
|
+
git clone https://github.com/tallclub/matimo.git
|
|
31
|
+
cd matimo
|
|
32
|
+
pnpm install
|
|
33
|
+
pnpm build
|
|
34
|
+
|
|
35
|
+
# Run tests
|
|
36
|
+
pnpm test
|
|
37
|
+
|
|
38
|
+
# Start using
|
|
39
|
+
const { matimo } = require('matimo');
|
|
40
|
+
const m = await matimo.init('./tools');
|
|
41
|
+
const result = await m.execute('calculator', { operation: 'add', a: 5, b: 3 });
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Prefer factory pattern (simple) or decorator pattern (class-based code). See [SDK Usage Patterns - Level 1](#level-1-pure-sdk-patterns-no-framework-required) for details.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Why Matimo?
|
|
49
|
+
|
|
50
|
+
### The Problem It Solves
|
|
51
|
+
|
|
52
|
+
Building agent workflows is exciting but painful: every framework (LangChain, CrewAI, AutoGen, LlamaIndex, custom TS agents, Claude via MCP, etc.) has its own way of defining, calling, and executing tools.
|
|
53
|
+
|
|
54
|
+
You end up duplicating tool logic, schemas, and integrations repeatedly.
|
|
55
|
+
|
|
56
|
+
**Matimo fixes this.** Define tools **once** in clean YAML files (with Zod validation for safety) and use them everywhere:
|
|
57
|
+
|
|
58
|
+
- **Pure TypeScript SDK** (factory or decorator patterns)
|
|
59
|
+
- **LangChain** (examples included)
|
|
60
|
+
- **MCP Server** (Claude-native) — coming soon
|
|
61
|
+
- **REST API** — coming soon
|
|
62
|
+
- **CLI** — coming soon
|
|
63
|
+
- **Python SDK** — coming soon
|
|
64
|
+
- **Tool Marketplace** (2000+ tools goal) — coming soon
|
|
65
|
+
|
|
66
|
+
**Define once → Plug into any agent ecosystem.**
|
|
67
|
+
|
|
68
|
+
### Why Open Source?
|
|
69
|
+
|
|
70
|
+
I built Matimo because I needed it while working on my own agent product — and I couldn't find a truly framework-agnostic, fully open-source alternative (most are paid or tightly coupled to one framework).
|
|
71
|
+
|
|
72
|
+
I'm a solo developer (nomadic coder at heart), so this project needs **your help** to become the go-to standard for agent tools.
|
|
73
|
+
|
|
74
|
+
### How You Can Help Right Now
|
|
75
|
+
|
|
76
|
+
- ⭐ **Star the repo** to show support and increase visibility
|
|
77
|
+
- 🐛 **Open issues** for bugs, missing features, or pain points
|
|
78
|
+
- 💡 **Suggest tools** to add (YAML examples welcome!)
|
|
79
|
+
- 🔀 **Submit PRs** — we follow TDD + Conventional Commits (see CONTRIBUTING.md)
|
|
80
|
+
- 📢 **Spread the word** on X/Twitter, Reddit (r/LocalLLM, r/AI_Agents, etc.), Discord communities
|
|
81
|
+
|
|
82
|
+
Let's build a simple, powerful shovel for the agentic world together.
|
|
83
|
+
|
|
84
|
+
With ❤️
|
|
85
|
+
[Sajesh](https://www.linkedin.com/in/sajeshnair/)
|
|
86
|
+
Creator of Matimo
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Built so far
|
|
91
|
+
|
|
92
|
+
**SDK with 2 Patterns**
|
|
93
|
+
|
|
94
|
+
- Factory pattern (simple, recommended)
|
|
95
|
+
- Decorator pattern (class-based agents)
|
|
96
|
+
|
|
97
|
+
**Tool Execution & Discovery**
|
|
98
|
+
|
|
99
|
+
- YAML/JSON tool definitions with validation
|
|
100
|
+
- Command executor (shell commands + parameter templating)
|
|
101
|
+
- HTTP executor (REST APIs with auth)
|
|
102
|
+
- Tool registry with search, filter, discover
|
|
103
|
+
|
|
104
|
+
**Quality & Type Safety**
|
|
105
|
+
|
|
106
|
+
- 100% test passing
|
|
107
|
+
- Full TypeScript strict mode (zero `any` types)
|
|
108
|
+
- Zod schema validation
|
|
109
|
+
- ESLint clean
|
|
110
|
+
|
|
111
|
+
**3 Example Tools**
|
|
112
|
+
|
|
113
|
+
- Calculator (command execution)
|
|
114
|
+
- HTTP Client (HTTP execution)
|
|
115
|
+
- Echo Tool (simple command)
|
|
116
|
+
|
|
117
|
+
**4 Gmail Tools**
|
|
118
|
+
|
|
119
|
+
- Create Draft
|
|
120
|
+
|
|
121
|
+
- Get Message
|
|
122
|
+
- List Message
|
|
123
|
+
- Send Email
|
|
124
|
+
|
|
125
|
+
## Planned
|
|
126
|
+
**Add Tools** - Github, Slack, Jira, Notion, etc
|
|
127
|
+
|
|
128
|
+
**MCP Server** — Claude & MCP client integration
|
|
129
|
+
|
|
130
|
+
**REST API** — HTTP endpoints for tool execution
|
|
131
|
+
|
|
132
|
+
**CLI** — Command-line tool management & testing
|
|
133
|
+
|
|
134
|
+
**OAuth2** — GitHub, Google, Slack authentication
|
|
135
|
+
|
|
136
|
+
**Python SDK** — Multi-language support
|
|
137
|
+
|
|
138
|
+
**Health Monitoring** — Detect API schema changes
|
|
139
|
+
|
|
140
|
+
**Rate Limiting** — Token bucket algorithm per tool
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
## Installation
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Coming soon to npm
|
|
147
|
+
npm install matimo
|
|
148
|
+
pnpm add matimo
|
|
149
|
+
|
|
150
|
+
# For now: clone and build locally
|
|
151
|
+
git clone https://github.com/tallclub/matimo.git
|
|
152
|
+
cd matimo && pnpm install && pnpm build
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## SDK Usage Patterns
|
|
156
|
+
|
|
157
|
+
### Level 1: Pure SDK Patterns (No Framework Required)
|
|
158
|
+
|
|
159
|
+
Use Matimo directly without any AI framework. Perfect for CLI tools, backends, scheduled jobs, and simple integrations.
|
|
160
|
+
|
|
161
|
+
#### 1. Factory Pattern (Recommended for Simple Use Cases)
|
|
162
|
+
|
|
163
|
+
Simplest, ergonomic, single-initialization API:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
import { matimo } from 'matimo';
|
|
167
|
+
|
|
168
|
+
// Initialize once
|
|
169
|
+
const matimoInstance = await matimo.init('./tools');
|
|
170
|
+
|
|
171
|
+
// Execute tools by name
|
|
172
|
+
const result = await matimoInstance.execute('calculator', {
|
|
173
|
+
operation: 'add',
|
|
174
|
+
a: 5,
|
|
175
|
+
b: 3,
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Discover tools
|
|
179
|
+
const allTools = matimoInstance.listTools();
|
|
180
|
+
const tool = matimoInstance.getTool('calculator');
|
|
181
|
+
const mathTools = matimoInstance.getToolsByTag('math');
|
|
182
|
+
const results = matimoInstance.searchTools('calculator');
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Use when:** You need simple tool execution without LLM orchestration.
|
|
186
|
+
|
|
187
|
+
#### 2. Decorator Pattern (Recommended for Class-Based Code)
|
|
188
|
+
|
|
189
|
+
For class-based applications with automatic tool binding:
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
import { tool } from 'matimo';
|
|
193
|
+
import { matimo } from 'matimo';
|
|
194
|
+
|
|
195
|
+
// Initialize Matimo (once)
|
|
196
|
+
const matimoInstance = await matimo.init('./tools');
|
|
197
|
+
|
|
198
|
+
// NOTE: `setGlobalMatimoInstance()` is convenient for quick demos.
|
|
199
|
+
// For production code prefer explicit injection (constructor/factory) or an explicit binder.
|
|
200
|
+
|
|
201
|
+
// Constructor / DI example (recommended for production)
|
|
202
|
+
class MyAgent {
|
|
203
|
+
constructor(public matimo: MatimoInstance) {}
|
|
204
|
+
|
|
205
|
+
@tool('calculator')
|
|
206
|
+
async calculate(operation: string, a: number, b: number) {
|
|
207
|
+
// @tool decorator intercepts this call
|
|
208
|
+
// Argument order matches tool parameters: operation, a, b
|
|
209
|
+
// Method body can be empty - decorator does the work
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@tool('github-get-repo')
|
|
213
|
+
async getRepo(owner: string, repo: string) {
|
|
214
|
+
// @tool decorator intercepts this call
|
|
215
|
+
// Argument order matches tool parameters: owner, repo
|
|
216
|
+
// Method body can be empty - decorator does the work
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const agent = new MyAgent(matimoInstance);
|
|
221
|
+
// When you call agent.calculate('add', 5, 3):
|
|
222
|
+
// 1. @tool decorator intercepts the call
|
|
223
|
+
// 2. Decorator maps arguments to parameters: { operation: 'add', a: 5, b: 3 }
|
|
224
|
+
// 3. Decorator calls matimo.execute('calculator', {...})
|
|
225
|
+
// 4. Result is returned to you
|
|
226
|
+
const result = await agent.calculate('add', 5, 3);
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Use when:** You prefer method-based calling style or class-based architecture.
|
|
230
|
+
|
|
231
|
+
**How @tool decorator works:**
|
|
232
|
+
|
|
233
|
+
- ✅ **Intercepts method calls** - Decorator intercepts and executes via Matimo
|
|
234
|
+
- ✅ **Auto-maps arguments** - Method args become tool parameters (in order)
|
|
235
|
+
- ✅ **Auto-executes tool** - Calls `matimo.execute(toolName, params)` automatically
|
|
236
|
+
- ✅ **Returns tool result** - The result from Matimo is returned to you
|
|
237
|
+
- ✅ **Fully scalable** - Add 100 tools = just add 100 `@tool()` decorated methods, no routing code
|
|
238
|
+
- ✅ **Works with DI** - Uses instance property or global instance
|
|
239
|
+
- ✅ **Method body optional** - Can be empty since decorator replaces it
|
|
240
|
+
|
|
241
|
+
### Level 2: Framework Integration Patterns (With AI Framework)
|
|
242
|
+
|
|
243
|
+
Integrate Matimo tools with LangChain(TS), CrewAI (coming soon) , or other AI frameworks for intelligent tool orchestration. The LLM automatically decides which tool to use.
|
|
244
|
+
|
|
245
|
+
#### LangChain Integration (Recommended for AI Agents)
|
|
246
|
+
|
|
247
|
+
Three complete, production-ready examples in [examples/langchain](./examples/langchain):
|
|
248
|
+
|
|
249
|
+
1. **LangChain Official API** (⭐ Most Recommended)
|
|
250
|
+
- Uses `createAgent()` + `tool()` from LangChain core
|
|
251
|
+
- Automatic schema generation and tool orchestration
|
|
252
|
+
- [See example](./examples/langchain/agents/langchain-agent.ts)
|
|
253
|
+
|
|
254
|
+
2. **Decorator Pattern with LangChain**
|
|
255
|
+
- Uses `@tool()` decorators with OpenAI function calling
|
|
256
|
+
- Integrates Matimo tools into class-based LangChain agents
|
|
257
|
+
- [See example](./examples/langchain/agents/decorator-pattern-agent.ts)
|
|
258
|
+
|
|
259
|
+
3. **Factory Pattern with LangChain**
|
|
260
|
+
- Direct `matimo.execute()` calls in LangChain agent
|
|
261
|
+
- Simple functional approach
|
|
262
|
+
- [See example](./examples/langchain/agents/factory-pattern-agent.ts)
|
|
263
|
+
|
|
264
|
+
All examples load tools from YAML once and reuse them across patterns — **single source of truth**.
|
|
265
|
+
|
|
266
|
+
**Quick Start:** See [examples/langchain/README.md](./examples/langchain/README.md) for setup instructions and running the agents.
|
|
267
|
+
|
|
268
|
+
**Use when:** You need intelligent tool selection based on natural language prompts.
|
|
269
|
+
|
|
270
|
+
## Integration Paths
|
|
271
|
+
|
|
272
|
+
### SDK (Available Now)
|
|
273
|
+
|
|
274
|
+
**Level 1: Pure SDK** (No framework required)
|
|
275
|
+
|
|
276
|
+
- **Factory Pattern** — Simplest API for any use case
|
|
277
|
+
- **Decorator Pattern** — Best for class-based code
|
|
278
|
+
|
|
279
|
+
See [SDK Usage Patterns - Level 1](#level-1-pure-sdk-patterns-no-framework-required) above for examples.
|
|
280
|
+
|
|
281
|
+
**Level 2: Framework Integration** (With AI framework)
|
|
282
|
+
|
|
283
|
+
- **LangChain Integration** — Production-ready AI agents with OpenAI GPT
|
|
284
|
+
- **CrewAI Integration** — Coming in Phase 2
|
|
285
|
+
- **Anthropic SDK Integration** — Coming in Phase 2
|
|
286
|
+
|
|
287
|
+
See [SDK Usage Patterns - Level 2](#level-2-framework-integration-patterns-with-ai-framework) above and [examples/langchain/README.md](./examples/langchain/README.md) for complete working examples.
|
|
288
|
+
|
|
289
|
+
### Advanced (Coming Soon)
|
|
290
|
+
|
|
291
|
+
**MCP Server (Claude Integration)**
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
import { MCPServer } from 'matimo/mcp';
|
|
295
|
+
|
|
296
|
+
const server = new MCPServer({
|
|
297
|
+
toolsPath: './tools',
|
|
298
|
+
autoLoad: true,
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
await server.start();
|
|
302
|
+
// Claude can now discover and call all loaded tools
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**REST API (HTTP Endpoints)**
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# Coming soon
|
|
309
|
+
matimo api --port 3000
|
|
310
|
+
|
|
311
|
+
curl -X POST http://localhost:3000/tools/calculator/execute \
|
|
312
|
+
-d '{"operation":"add","a":5,"b":3}'
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**CLI (Command Line)**
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
matimo list # List all tools
|
|
319
|
+
matimo execute calculator --operation add --a 5 --b 3
|
|
320
|
+
matimo validate tools/calculator.yaml # Validate tool YAML
|
|
321
|
+
matimo test calculator # Test tool
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Tool Definition (YAML)
|
|
325
|
+
|
|
326
|
+
Tools are defined once in YAML, executed everywhere. Each tool specifies its execution type, parameters, schema, and auth:
|
|
327
|
+
|
|
328
|
+
```yaml
|
|
329
|
+
name: calculator
|
|
330
|
+
version: 1.0.0
|
|
331
|
+
description: Perform basic mathematical operations
|
|
332
|
+
|
|
333
|
+
parameters:
|
|
334
|
+
operation:
|
|
335
|
+
type: string
|
|
336
|
+
enum: [add, subtract, multiply, divide]
|
|
337
|
+
required: true
|
|
338
|
+
description: Mathematical operation
|
|
339
|
+
a:
|
|
340
|
+
type: number
|
|
341
|
+
required: true
|
|
342
|
+
description: First operand
|
|
343
|
+
b:
|
|
344
|
+
type: number
|
|
345
|
+
required: true
|
|
346
|
+
description: Second operand
|
|
347
|
+
|
|
348
|
+
execution:
|
|
349
|
+
type: command
|
|
350
|
+
command: ts-node
|
|
351
|
+
args: ['tools/calculator/calculator.ts', '{operation}', '{a}', '{b}']
|
|
352
|
+
timeout: 30000
|
|
353
|
+
|
|
354
|
+
output_schema:
|
|
355
|
+
type: object
|
|
356
|
+
properties:
|
|
357
|
+
result:
|
|
358
|
+
type: number
|
|
359
|
+
description: Calculation result
|
|
360
|
+
|
|
361
|
+
error_handling:
|
|
362
|
+
retry: 3
|
|
363
|
+
backoff_type: exponential
|
|
364
|
+
initial_delay_ms: 1000
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Execution Types
|
|
368
|
+
|
|
369
|
+
**Implemented:**
|
|
370
|
+
|
|
371
|
+
- **`command`** — Shell commands with parameter templating
|
|
372
|
+
- **`http`** — REST APIs with auth and response validation
|
|
373
|
+
|
|
374
|
+
**Coming:**
|
|
375
|
+
|
|
376
|
+
- **`script`** — Safe JavaScript/Python execution (sandboxed)
|
|
377
|
+
- **`docker`** — Containerized execution
|
|
378
|
+
- **`custom`** — External executables
|
|
379
|
+
|
|
380
|
+
## Architecture
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
┌─────────────────────────────────────────────┐
|
|
384
|
+
│ AI Agents & Frameworks │
|
|
385
|
+
│ (Claude, LangChain, CrewAI, Custom) │
|
|
386
|
+
└──────────┬────────────────┬─────────────────┘
|
|
387
|
+
│ │
|
|
388
|
+
┌─────▼─────┐ ┌─────▼─────┐
|
|
389
|
+
│ SDK │ │ MCP │
|
|
390
|
+
│ │ │ │
|
|
391
|
+
└─────┬─────┘ └──────┬────┘
|
|
392
|
+
│ │
|
|
393
|
+
└────────┬───────┘
|
|
394
|
+
│
|
|
395
|
+
┌──────────▼──────────┐
|
|
396
|
+
│ Matimo Core │
|
|
397
|
+
│ - Loader │
|
|
398
|
+
│ - Validator │
|
|
399
|
+
│ - Executors │
|
|
400
|
+
└──────────┬──────────┘
|
|
401
|
+
│
|
|
402
|
+
┌────────────┼────────────┐
|
|
403
|
+
│ │ │
|
|
404
|
+
▼ ▼ ▼
|
|
405
|
+
┌────────┐ ┌──────────┐ ┌────────┐
|
|
406
|
+
│Command │ │ HTTP │ │ Schema │
|
|
407
|
+
│Exec │ │ Exec │ │Validate│
|
|
408
|
+
└────────┘ └──────────┘ └────────┘
|
|
409
|
+
│ │ │
|
|
410
|
+
└────────────┼────────────┘
|
|
411
|
+
│
|
|
412
|
+
┌───────────▼───────────┐
|
|
413
|
+
│ Tool Definitions │
|
|
414
|
+
│ (YAML/JSON files) │
|
|
415
|
+
│ calculator │
|
|
416
|
+
│ http-client │
|
|
417
|
+
│ echo-tool │
|
|
418
|
+
│ 1000+ coming soon │
|
|
419
|
+
└───────────────────────┘
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
## Project Structure
|
|
423
|
+
|
|
424
|
+
```
|
|
425
|
+
matimo/
|
|
426
|
+
├── src/
|
|
427
|
+
│ ├── core/ # Core types, schemas
|
|
428
|
+
│ ├── executors/ # Command & HTTP execution
|
|
429
|
+
│ ├── decorators/ # @tool decorator pattern
|
|
430
|
+
│ ├── mcp/ # MCP server
|
|
431
|
+
│ ├── cli/ # CLI interface
|
|
432
|
+
│ ├── errors/ # Error handling
|
|
433
|
+
│ └── logging/ # Structured logging
|
|
434
|
+
├── tools/
|
|
435
|
+
│ ├── calculator/ # Calculator tool
|
|
436
|
+
│ ├── echo-tool/ # Echo tool
|
|
437
|
+
│ └── http-client/ # HTTP client tool
|
|
438
|
+
├── test/ # tests
|
|
439
|
+
│ ├── unit/
|
|
440
|
+
│ └── integration/
|
|
441
|
+
├── docs/
|
|
442
|
+
│ ├── quick-start.md
|
|
443
|
+
│ ├── api.md
|
|
444
|
+
│ ├── tool-spec.md
|
|
445
|
+
│ └── ...
|
|
446
|
+
└── package.json
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
## Development
|
|
450
|
+
|
|
451
|
+
### Prerequisites
|
|
452
|
+
|
|
453
|
+
- **Node.js** 18+
|
|
454
|
+
- **pnpm** 8.15+
|
|
455
|
+
- **TypeScript** 5.9+
|
|
456
|
+
|
|
457
|
+
### Setup
|
|
458
|
+
|
|
459
|
+
```bash
|
|
460
|
+
git clone https://github.com/tallclub/matimo.git
|
|
461
|
+
cd matimo
|
|
462
|
+
pnpm install
|
|
463
|
+
pnpm build
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### Commands
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
pnpm build # Compile TypeScript
|
|
470
|
+
pnpm test # Run all tests
|
|
471
|
+
pnpm test:watch # Watch mode
|
|
472
|
+
pnpm test:coverage # Coverage report
|
|
473
|
+
pnpm lint # ESLint
|
|
474
|
+
pnpm format # Prettier formatting
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Testing
|
|
478
|
+
|
|
479
|
+
Matimo uses Jest with TypeScript. Tests follow TDD principles:
|
|
480
|
+
|
|
481
|
+
```bash
|
|
482
|
+
pnpm test # All tests
|
|
483
|
+
pnpm test types.test.ts # Specific file
|
|
484
|
+
pnpm test:watch # Watch mode
|
|
485
|
+
pnpm test:coverage # Coverage (target: 80%+)
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
**Coverage Target:** 80%+ (currently 112 tests, 11+ suites)
|
|
489
|
+
|
|
490
|
+
## Community
|
|
491
|
+
|
|
492
|
+
We welcome contributions!
|
|
493
|
+
|
|
494
|
+
### Getting Started
|
|
495
|
+
|
|
496
|
+
1. **Fork** the repository
|
|
497
|
+
2. **Create branch** (`git checkout -b feature/amazing-feature`)
|
|
498
|
+
3. **Write tests first** (TDD approach)
|
|
499
|
+
4. **Make changes**
|
|
500
|
+
5. **Run tests** (`pnpm test && pnpm lint`)
|
|
501
|
+
6. **Commit** with conventional commits
|
|
502
|
+
7. **Push** and open PR
|
|
503
|
+
|
|
504
|
+
### Commit Format
|
|
505
|
+
|
|
506
|
+
We enforce [Conventional Commits](https://www.conventionalcommits.org/):
|
|
507
|
+
|
|
508
|
+
```
|
|
509
|
+
feat(scope): short description
|
|
510
|
+
fix(executor): validate parameters
|
|
511
|
+
docs(readme): update guide
|
|
512
|
+
test(decorator): add tests
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### What Can You Contribute?
|
|
516
|
+
|
|
517
|
+
- Core SDK improvements
|
|
518
|
+
- Bug fixes
|
|
519
|
+
- Documentation
|
|
520
|
+
- Test coverage
|
|
521
|
+
- Tool definitions
|
|
522
|
+
- New executor types
|
|
523
|
+
- Performance optimizations
|
|
524
|
+
- Security
|
|
525
|
+
- Ideas
|
|
526
|
+
|
|
527
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
|
|
528
|
+
|
|
529
|
+
## Documentation
|
|
530
|
+
|
|
531
|
+
- **[Quick Start](./docs/getting-started/QUICK_START.md)** — Get up and running in 5 minutes
|
|
532
|
+
- **[API Reference](./docs/api-reference/SDK.md)** — Complete SDK API
|
|
533
|
+
- **[Tool Specification](./docs/tool-development/TOOL_SPECIFICATION.md)** — How to write YAML tools
|
|
534
|
+
- **[Decorator Guide](./docs/tool-development/DECORATOR_GUIDE.md)** — Using @tool decorators
|
|
535
|
+
- **[Commit Guidelines](./docs/community/COMMIT_GUIDELINES.md)** — Conventional commits
|
|
536
|
+
- **[Development Standards](./docs/user-guide/DEVELOPMENT_STANDARDS.md)** — Code quality rules
|
|
537
|
+
- **[Architecture Overview](./docs/architecture/OVERVIEW.md)** — System design and patterns
|
|
538
|
+
- **[Framework Integrations](./docs/framework-integrations/LANGCHAIN.md)** — LangChain, CrewAI patterns
|
|
539
|
+
|
|
540
|
+
## Roadmap
|
|
541
|
+
|
|
542
|
+
### Foundation (Complete)
|
|
543
|
+
|
|
544
|
+
**Completed:**
|
|
545
|
+
|
|
546
|
+
- Tool loading (YAML/JSON)
|
|
547
|
+
- Command & HTTP executors
|
|
548
|
+
- Factory & Decorator patterns
|
|
549
|
+
- Tool registry & discovery
|
|
550
|
+
- 112+ tests (100% passing)
|
|
551
|
+
- Full TypeScript strict mode
|
|
552
|
+
|
|
553
|
+
### Reliability (Coming)
|
|
554
|
+
|
|
555
|
+
**Upcoming:**
|
|
556
|
+
|
|
557
|
+
- MCP server (Claude integration)
|
|
558
|
+
- CLI tool management
|
|
559
|
+
- REST API server
|
|
560
|
+
- OAuth2 authentication
|
|
561
|
+
- Rate limiting
|
|
562
|
+
- Health monitoring
|
|
563
|
+
|
|
564
|
+
### Ecosystem (Coming)
|
|
565
|
+
|
|
566
|
+
**Future:**
|
|
567
|
+
|
|
568
|
+
- Python SDK
|
|
569
|
+
- MCP
|
|
570
|
+
- Skills/Workflows (multi-tool orchestration)
|
|
571
|
+
- 2000+ pre-configured tools
|
|
572
|
+
|
|
573
|
+
## Performance Benchemark Expected
|
|
574
|
+
|
|
575
|
+
- **Tool Execution:** <100ms overhead per call
|
|
576
|
+
- **Schema Validation:** <10ms per request
|
|
577
|
+
- **Memory:** ~50MB base + 1-2MB per loaded tool
|
|
578
|
+
- **Concurrency:** 100+ simultaneous tools
|
|
579
|
+
|
|
580
|
+
## Security
|
|
581
|
+
|
|
582
|
+
### Implemented
|
|
583
|
+
|
|
584
|
+
**Currently:**
|
|
585
|
+
|
|
586
|
+
- No hardcoded credentials (environment variables only)
|
|
587
|
+
- Input validation (Zod schemas)
|
|
588
|
+
- Safe error messages (no secret leaks)
|
|
589
|
+
- Full TypeScript strict mode
|
|
590
|
+
|
|
591
|
+
### Coming
|
|
592
|
+
|
|
593
|
+
**Next:**
|
|
594
|
+
|
|
595
|
+
- Response validation against schemas
|
|
596
|
+
- Health monitoring (detect API changes)
|
|
597
|
+
- OAuth2 token management
|
|
598
|
+
- Rate limiting
|
|
599
|
+
|
|
600
|
+
**Future:**
|
|
601
|
+
|
|
602
|
+
- Sandboxed execution (Docker/Firejail)
|
|
603
|
+
- Encryption at rest
|
|
604
|
+
- Audit logging
|
|
605
|
+
- Zero-trust architecture
|
|
606
|
+
|
|
607
|
+
See [SECURITY.md](./SECURITY.md) for detailed guidelines.
|
|
608
|
+
|
|
609
|
+
## License
|
|
610
|
+
|
|
611
|
+
MIT © 2026 Matimo Contributors
|
|
612
|
+
|
|
613
|
+
## Support
|
|
614
|
+
|
|
615
|
+
- 📖 [Docs](./docs)
|
|
616
|
+
- 💬 [Discussions](https://github.com/tallclub/matimo/discussions)
|
|
617
|
+
- 🐛 [Issues](https://github.com/tallclub/matimo/issues)
|
|
618
|
+
|
|
619
|
+
## Contributors
|
|
620
|
+
|
|
621
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
622
|
+
[](#contributors-)
|
|
623
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
624
|
+
|
|
625
|
+
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
626
|
+
<!-- prettier-ignore-start -->
|
|
627
|
+
<!-- markdownlint-disable -->
|
|
628
|
+
<table>
|
|
629
|
+
<tbody>
|
|
630
|
+
<tr>
|
|
631
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tallclub"><img src="https://avatars.githubusercontent.com/u/112923179?v=4?s=100" width="50px;" alt="tallclub" style="border-radius: 50%;"/>
|
|
632
|
+
</tr>
|
|
633
|
+
</tbody>
|
|
634
|
+
</table>
|
|
635
|
+
|
|
636
|
+
<!-- markdownlint-restore -->
|
|
637
|
+
<!-- prettier-ignore-end -->
|
|
638
|
+
|
|
639
|
+
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
640
|
+
|
|
641
|
+
Contributions are welcome — see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
|
|
642
|
+
|
|
643
|
+
## Star History
|
|
644
|
+
|
|
645
|
+
[](https://www.star-history.com/#tallclub/matimo&type=date&legend=top-left)
|
|
646
|
+
|
|
647
|
+
---
|
|
648
|
+
|
|
649
|
+
**Ready to integrate AI tools across your framework?**
|
|
650
|
+
|
|
651
|
+
[Get Started Now →](./docs/QUICK_START.md)
|