Documentație API pentru Conectarea Modelelor AI
Ai nimerit direct în camera motoarelor. Ceea ce vezi aici este interfața de programare (API) a unui Model Context Protocol (MCP) – un agent inteligent dedicat sistemului de educație din România.
Noi, la AI.Parte, credem cu tărie în libertatea informației și în puterea colaborării. De aceea am construit acest MCP. Este primul MCP server cu informații deschise din România, creat pentru a aduce claritate acolo unde domnește confuzia.
Aceasta este metoda modernă și cea mai eficientă. În loc ca aplicația ta să orchestreze apelurile, delegi această responsabilitate direct către modelul AI. Pur și simplu îi spui lui Claude sau Gemini adresa serverului nostru, iar el se va conecta, va descoperi uneltele și le va folosi automat pentru a-ți răspunde.
URL Server MCP: https://aiparte.ro/scoli/server_scoli/mcp
Nume Server (sugerat): aiparte_edu_romania
Autentificare: Nu este necesară.
Observă cât de simplu este. Nu există logică de orchestrare manuală, doar specifici adresa serverului nostru în cererea către API-ul modelului AI.
import anthropic
client = anthropic.Anthropic(api_key="CHEIA_TA_API_ANTHROPIC")
mcp_server = {
"type": "url",
"url": "https://aiparte.ro/scoli/server_scoli/mcp",
"name": "aiparte_edu_romania"
}
message = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=4096,
messages=[{"role": "user", "content": "Ce licee de top sunt în Cluj-Napoca?"}],
mcp_servers=[mcp_server]
)
print(message.content)
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "anthropic-beta: mcp-client-2025-04-04" \
--header "content-type: application/json" \
--data '{
"model": "claude-3-5-sonnet-20240620",
"max_tokens": 4096,
"messages": [
{"role": "user", "content": "Ce licee de top sunt în Cluj-Napoca?"}
],
"mcp_servers": [
{
"type": "url",
"url": "https://aiparte.ro/scoli/server_scoli/mcp",
"name": "aiparte_edu_romania"
}
]
}'
Următoarele metode vă permit să verificați dacă serverul MCP funcționează corect, independent de un client AI.
Testarea directă a serverului MCP folosind protocolul JSON-RPC 2.0 standard.
curl -X POST https://aiparte.ro/scoli/server_scoli/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {
"tools": {}
},
"clientInfo": {
"name": "curl-test-client",
"version": "1.0.0"
}
}
}'
curl -X POST https://aiparte.ro/scoli/server_scoli/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}'
curl -X POST https://aiparte.ro/scoli/server_scoli/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_informatii_extinse",
"arguments": {
"nume_scoala": "Liceul Teoretic Avram Iancu",
"localitate": "Cluj-Napoca"
}
}
}'
În această abordare alternativă, aplicația ta (clientul) este "creierul" operațiunii. Tu ești responsabil pentru a apela endpoint-urile noastre, a procesa răspunsurile și a comunica cu modelul tău AI. Este o metodă flexibilă, compatibilă cu orice model AI care suportă tool-calling.
Mai jos găsiți detalii complete și exemple de cod pentru fiecare unealtă. Exemplele ilustrează apelarea manuală prin endpoint-ul /call_tool.
Scop: Returnează o listă generală de unități de învățământ pe baza unor criterii de filtrare.
| Parametru | Tip | Descriere |
|---|---|---|
nume_scoala | string | O parte din numele școlii. |
localitate | string | Numele localității. |
judet | string | Numele județului. |
tip_unitate | string | Tipul unității (ex: 'liceu', 'grădiniță'). |
tip_finantare | string | 'Buget' sau 'Taxă'. |
limit | integer | Numărul maxim de rezultate (implicit 20). |
/call_tool)curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_school_general_info(localitate=\"Cluj-Napoca\", tip_unitate=\"grădiniță\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_school_general_info(localitate='Cluj-Napoca', tip_unitate='grădiniță')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_school_general_info(localitate='Cluj-Napoca', tip_unitate='grădiniță')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Oferă toate detaliile disponibile despre o singură unitate. Căutarea după cod_siiir este cea mai precisă.
| Parametru | Tip | Descriere |
|---|---|---|
cod_siiir | string | Codul SIIIR unic al școlii (preferat). |
nume_scoala | string | Numele exact sau parțial al școlii. |
localitate | string | Numele localității pentru a restrânge căutarea. |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_informatii_extinse(cod_siiir=\"401234567\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_informatii_extinse(cod_siiir='401234567')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_informatii_extinse(cod_siiir='401234567')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Returnează o listă de școli cu distincții și scoruri de performanță. Ideal pentru comparații și topuri.
Identici cu cei de la get_school_general_info.
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_school_distinctions(judet=\"Cluj\", tip_unitate=\"Liceu\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_school_distinctions(judet='Cluj', tip_unitate='Liceu')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_school_distinctions(judet='Cluj', tip_unitate='Liceu')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Găsește școlile aflate într-o anumită rază (în km) față de o școală de referință.
| Parametru | Tip | Descriere |
|---|---|---|
nume_scoala | string | Numele școlii de referință (punctul central). |
localitate | string | Localitatea școlii de referință. |
radius_km | integer | Raza în kilometri (implicit 5). |
tip_unitate | string | Filtrează școlile găsite după tip (opțional). |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_nearby_schools(nume_scoala=\"Liceul Teoretic Avram Iancu\", localitate=\"Cluj-Napoca\", radius_km=2)"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_nearby_schools(nume_scoala='Liceul Teoretic Avram Iancu', localitate='Cluj-Napoca', radius_km=2)"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_nearby_schools(nume_scoala='Liceul Teoretic Avram Iancu', localitate='Cluj-Napoca', radius_km=2)" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Trimite un rezumat al conversației la o adresă de email specificată.
| Parametru | Tip | Descriere |
|---|---|---|
recipient_email | string | Adresa de email a destinatarului. |
summary_content | string | Textul care trebuie trimis în corpul email-ului. |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "send_summary_email(recipient_email=\"exemplu@domeniu.ro\", summary_content=\"Acesta este rezumatul discuției.\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "send_summary_email(recipient_email='exemplu@domeniu.ro', summary_content='Acesta este rezumatul discuției.')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "send_summary_email(recipient_email='exemplu@domeniu.ro', summary_content='Acesta este rezumatul discuției.')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Returnează statistici detaliate despre rata de promovare, mediile generale și performanța pe specializări la examenul de Bacalaureat.
| Parametru | Tip | Descriere |
|---|---|---|
cod_siiir | string | Codul SIIIR unic al liceului. |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_rezultate_bacalaureat(cod_siiir=\"1261100289\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_rezultate_bacalaureat(cod_siiir='1261100289')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_rezultate_bacalaureat(cod_siiir='1261100289')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Returnează mediile și rata de promovare la Evaluarea Națională (Capacitate) pentru o unitate de învățământ gimnazial.
| Parametru | Tip | Descriere |
|---|---|---|
cod_siiir | string | Codul SIIIR unic al școlii gimnaziale. |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_rezultate_evaluare_nationala(cod_siiir=\"461106593\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_rezultate_evaluare_nationala(cod_siiir='461106593')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_rezultate_evaluare_nationala(cod_siiir='461106593')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Obține ultimele medii de admitere și numărul de locuri ocupate pe specializări pentru admiterea la liceu.
| Parametru | Tip | Descriere |
|---|---|---|
cod_siiir | string | Codul SIIIR unic al liceului. |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_statistici_admitere_liceu(cod_siiir=\"3561106417\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_statistici_admitere_liceu(cod_siiir='3561106417')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_statistici_admitere_liceu(cod_siiir='3561106417')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Oferă un raport narativ vast și detaliat despre o școală. Include secțiuni pentru istoric, recenzii și opinii ale părinților, incidente și controverse, și facilități.
| Parametru | Tip | Descriere |
|---|---|---|
cod_siiir | string | Codul SIIIR unic al unității școlare. |
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_analiza_ai_scoala(cod_siiir=\"2361101743\")"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_analiza_ai_scoala(cod_siiir='2361101743')"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_analiza_ai_scoala(cod_siiir='2361101743')" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Obține lista resurselor generale (documentație internă, proceduri, informații de sistem) sau conținutul complet al unei resurse specifice.
| Parametru | Tip | Descriere |
|---|---|---|
resource_id | integer | ID-ul resursei pentru a extrage conținutul complet (opțional). |
search_term | string | Cuvânt cheie pentru a căuta în titlul sau sumarul resurselor (opțional). |
Notă: Dacă este apelată fără parametri, funcția returnează lista primelor 20 de resurse disponibile.
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_mcp_resources(resource_id=1)"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_mcp_resources(resource_id=1)"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_mcp_resources(resource_id=1)" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));Scop: Obține lista de prompturi de sistem disponibile (reguli de comportament, șabloane de răspuns) sau instrucțiunile specifice unui prompt anume.
| Parametru | Tip | Descriere |
|---|---|---|
prompt_id | integer | ID-ul promptului pentru a extrage instrucțiunile (opțional). |
keyword | string | Cuvânt cheie pentru a filtra prompturile disponibile (opțional). |
Notă: Dacă este apelată fără parametri, funcția returnează lista primelor 20 de prompturi.
curl -X POST "https://aiparte.ro/scoli/server_scoli/call_tool?session_id=demo-session-123&user_ip=127.0.0.1&client_id=demo-client-456" \
-H "Content-Type: application/json" \
-d '{"tool_call": "get_mcp_prompts()"}'import requests
import uuid
session_id = f"demo-session-{uuid.uuid4().hex[:8]}"
api_url = "https://aiparte.ro/scoli/server_scoli/call_tool"
payload = {"tool_call": "get_mcp_prompts()"}
params = {
"session_id": session_id,
"user_ip": "127.0.0.1",
"client_id": f"demo-client-{session_id}"
}
response = requests.post(api_url, params=params, json=payload)
print(response.json())const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const sessionId = `demo-session-${uuidv4().substring(0, 8)}`;
const api_url = "https://aiparte.ro/scoli/server_scoli/call_tool";
const payload = { tool_call: "get_mcp_prompts()" };
const params = {
session_id: sessionId,
user_ip: "127.0.0.1",
client_id: `demo-client-${sessionId}`
};
axios.post(api_url, payload, { params }).then(r => console.log(r.data));