Työkalut: CLI vs. MCP
AI-agentti on yhtä hyvä kuin sen työkalut. Tässä oppitunnissa vertaamme kahta päälähestymistapaa: CLI-komennot (perinteiset komentorivikäyttöliittymät) ja MCP (Model Context Protocol).
Päätöskehikko
Työkalu agentin kontekstissa
Työkalu on rajapinta, jonka kautta agentti vuorovaikuttaa ulkoisen järjestelmän kanssa. Se voi olla yksinkertainen CLI-komento (git status), API-kutsu (HTTP POST) tai MCP-palvelin (strukturoitu protokolla). Työkalu muuntaa agentin päätöksen konkreettiseksi toiminnoksi.
| Päätöstekijä | CLI-työkalut | MCP-työkalut |
|---|---|---|
| Olemassa oleva ekosysteemi | Erinomainen | Kasvava |
| Käyttöönotto | Nopea | Keskitaso |
| Debuggaus | Suoraviivainen (stdout) | Schema/tapahtumapohjainen |
| Tilalliset integraatiot | Manuaalinen orkestrointi | Vahva |
| Käyttöoikeushallinta | Skriptatut konventiot | Ensimmäisen luokan protokolla |
CLI-työkalut
CLI-työkalut ovat perinteisiä komentoriviohjelmia: git, npm, docker, pytest.
Edut
- Vakaat ja testattuja — vuosien tuotantokokemus
- Universaalit — toimivat kaikilla alustoilla
- Helppo debugata — stdout + stderr
- Nopea käyttöönotto — ei erillistä palvelinta
Agentti + CLI käytännössä
# Työkalun deklaraatio (LLM:lle)
{
"name": "git_status",
"description": "Get current git status",
"parameters": {
"type": "object",
"properties": {},
"required": [],
},
}
# Työkalun suoritus
def execute_git_status():
result = subprocess.run(
["git", "status", "--short"],
capture_output=True,
text=True,
)
return {
"ok": result.returncode == 0,
"stdout": result.stdout,
"stderr": result.stderr,
}CLI-työkalujen tyypit
| Tyyppi | Esimerkit | Agentin käyttötapa |
|---|---|---|
| Versionhallinta | git status, git diff | Koodin tilan tarkistus |
| Pakettien hallinta | npm install, pip install | Riippuvuuksien asennus |
| Testaus | pytest, vitest | Testien suoritus |
| Kontit | docker build, docker run | Ympäristöjen hallinta |
| Tiedostot | cat, grep, find | Tiedon haku |
MCP — Model Context Protocol
MCP on uudempi, standardoitu protokolla AI-agentin ja ulkoisten palveluiden väliseen kommunikaatioon.
MCP (Model Context Protocol)
MCP (Model Context Protocol) on avoin protokolla, joka standardoi miten AI-agentit kommunikoivat ulkoisten tietolähteiden ja työkalujen kanssa. Se tarjoaa strukturoidun rajapinnan, käyttöoikeushallinnan ja tilallisen kommunikaation — ominaisuuksia joita perinteiset CLI-työkalut eivät tarjoa natiivisti.
MCP:n edut
- Strukturoitu data — JSON-skeema sisään ja ulos
- Käyttöoikeushallinta — protokollatason turvallisuus
- Tilalliset sessiot — palvelin muistaa kontekstin
- Löydettävyys — palvelin kertoo mitä työkaluja on
MCP käytännössä
{
"name": "database_query",
"description": "Execute a read-only SQL query",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "SQL SELECT query to execute"
},
"limit": {
"type": "number",
"description": "Max rows to return",
"default": 100
}
},
"required": ["query"]
}
}Milloin CLI, milloin MCP?
Pro-vinkki
Nyrkkisääntö: Jos vakaa CLI on olemassa (git, npm, docker, pytest), käytä sitä. Jos tarvitset rikasta strukturoitua vuorovaikutusta (selain, tietokanta, SaaS-integraatio), harkitse MCP:tä. Älä kääri CLI:tä MCP:ksi "koska voit" — valitse halvempi rajapinta.
Päätöspuu
Onko vakaa CLI olemassa?
├── Kyllä → Käytä CLI:tä
│ └── Tarvitsetko tilallista sessiota?
│ ├── Ei → CLI riittää
│ └── Kyllä → Harkitse MCP-wrapper
└── Ei → Tarvitsetko strukturoitua dataa?
├── Kyllä → MCP
└── Ei → Yksinkertainen HTTP/API-kutsu
Oman CLI-työkalun rakentaminen
Uuden CLI-työkalun lisääminen agenttiin on 3 vaihetta:
1. Deklaroi työkalu
Kerro LLM:lle mitä työkalu tekee (nimi, kuvaus, parametrit).
2. Toteuta suoritus
Kirjoita funktio joka suorittaa todellisen komennon.
3. Rekisteröi turvallisuussäännöt
Lisää blokkilistalle vaarallisia komentoyhdistelmiä.
# 1. Deklaraatio
{
"name": "read_file",
"description": "Read contents of a file",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "File path to read"
}
},
"required": ["path"],
},
}
# 2. Suoritus
def execute_read_file(path: str) -> dict:
try:
with open(path, 'r') as f:
content = f.read()
return {"ok": True, "content": content}
except FileNotFoundError:
return {"ok": False, "error": f"File not found: {path}"}
# 3. Turvallisuus
BLOCKED_PATHS = [".env", "credentials", "secrets"]
def is_safe_path(path: str) -> bool:
return not any(b in path.lower() for b in BLOCKED_PATHS)Milloin MCP on parempi valinta kuin CLI-työkalu?
Rakenna oma työkalu agentille
Luo uusi työkalu AI-agentille: 1) Valitse tehtävä (esim. tiedostohaku, prosessin tarkistus, API-kutsu), 2) Kirjoita deklaraatio (nimi, kuvaus, parametrit), 3) Toteuta suoritusfunktio, 4) Lisää turvallisuustarkistukset. Testaa antamalla agentille tehtävä joka vaatii työkalua.
Yhteenveto
- CLI-työkalut ovat vakaita, universaaleja ja nopeasti käyttöönotettavia
- MCP tarjoaa strukturoitua dataa, tilallisia sessioita ja käyttöoikeushallintaa
- Valitse halvempi rajapinta: CLI ensin, MCP kun tarvitset lisäominaisuuksia
- Turvallisuustarkistukset ovat pakollisia kaikille työkaluille
- Seuraavaksi rakennamme oman agentin gemini_agent.py-pohjasta