Edu.Romania MCP

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.

Suntem cu toții o comunitate de "makers" pentru binele comun.
Haide să facem lucruri cool împreună!
Două metode de integrare: Recomandăm Metoda 1 (Nativă MCP) pentru simplitate și eficiență. Metoda 2 (Tool calling standard) este o alternativă flexibilă pentru orice alt scenariu.

Termeni de Utilizare

Metoda 1: Integrare Nativă MCP (Recomandată)

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.

Date de Conectare

URL Server MCP: https://aiparte.ro/scoli/server_scoli/mcp
Nume Server (sugerat): aiparte_edu_romania
Autentificare: Nu este necesară.

Exemple de Apel în Aplicația Dvs.

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"
      }
    ]
  }'

Testarea Directă a Serverului MCP

Următoarele metode vă permit să verificați dacă serverul MCP funcționează corect, independent de un client AI.

Metoda A: Folosind cURL din linia de comandă

Testarea directă a serverului MCP folosind protocolul JSON-RPC 2.0 standard.

Verificarea #1: Inițializarea conexiunii MCP
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"
        }
    }
}'
Verificarea #2: Descoperirea uneltelor disponibile
curl -X POST https://aiparte.ro/scoli/server_scoli/mcp \
-H "Content-Type: application/json" \
-d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
}'
Verificarea #3: Execuția unei unelte
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"
        }
    }
}'

Metoda 2: Integrare Tradițională (Orchestrare de către Client)

Î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.

Referință Detaliată a Uneltelor

Mai jos găsiți detalii complete și exemple de cod pentru fiecare unealtă. Exemplele ilustrează apelarea manuală prin endpoint-ul /call_tool.

search get_school_general_info

Scop: Returnează o listă generală de unități de învățământ pe baza unor criterii de filtrare.

Parametri

ParametruTipDescriere
nume_scoalastringO parte din numele școlii.
localitatestringNumele localității.
judetstringNumele județului.
tip_unitatestringTipul unității (ex: 'liceu', 'grădiniță').
tip_finantarestring'Buget' sau 'Taxă'.
limitintegerNumărul maxim de rezultate (implicit 20).

Exemple de Cod (pentru /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));

info get_informatii_extinse

Scop: Oferă toate detaliile disponibile despre o singură unitate. Căutarea după cod_siiir este cea mai precisă.

Parametri

ParametruTipDescriere
cod_siiirstringCodul SIIIR unic al școlii (preferat).
nume_scoalastringNumele exact sau parțial al școlii.
localitatestringNumele localității pentru a restrânge căutarea.

Exemple de Cod

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));

emoji_events get_school_distinctions

Scop: Returnează o listă de școli cu distincții și scoruri de performanță. Ideal pentru comparații și topuri.

Parametri

Identici cu cei de la get_school_general_info.

Exemple de Cod

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));

my_location get_nearby_schools

Scop: Găsește școlile aflate într-o anumită rază (în km) față de o școală de referință.

Parametri

ParametruTipDescriere
nume_scoalastringNumele școlii de referință (punctul central).
localitatestringLocalitatea școlii de referință.
radius_kmintegerRaza în kilometri (implicit 5).
tip_unitatestringFiltrează școlile găsite după tip (opțional).

Exemple de Cod

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));

forward_to_inbox send_summary_email

Scop: Trimite un rezumat al conversației la o adresă de email specificată.

Parametri

ParametruTipDescriere
recipient_emailstringAdresa de email a destinatarului.
summary_contentstringTextul care trebuie trimis în corpul email-ului.

Exemple de Cod

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));

school get_rezultate_bacalaureat

Scop: Returnează statistici detaliate despre rata de promovare, mediile generale și performanța pe specializări la examenul de Bacalaureat.

Parametri

ParametruTipDescriere
cod_siiirstringCodul SIIIR unic al liceului.

Exemple de Cod

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));

analytics get_rezultate_evaluare_nationala

Scop: Returnează mediile și rata de promovare la Evaluarea Națională (Capacitate) pentru o unitate de învățământ gimnazial.

Parametri

ParametruTipDescriere
cod_siiirstringCodul SIIIR unic al școlii gimnaziale.

Exemple de Cod

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));

timeline get_statistici_admitere_liceu

Scop: Obține ultimele medii de admitere și numărul de locuri ocupate pe specializări pentru admiterea la liceu.

Parametri

ParametruTipDescriere
cod_siiirstringCodul SIIIR unic al liceului.

Exemple de Cod

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));

psychology get_analiza_ai_scoala

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.

Parametri

ParametruTipDescriere
cod_siiirstringCodul SIIIR unic al unității școlare.

Exemple de Cod

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));

folder_open get_mcp_resources

Scop: Obține lista resurselor generale (documentație internă, proceduri, informații de sistem) sau conținutul complet al unei resurse specifice.

Parametri

ParametruTipDescriere
resource_idintegerID-ul resursei pentru a extrage conținutul complet (opțional).
search_termstringCuvâ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.

Exemple de Cod

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));

terminal get_mcp_prompts

Scop: Obține lista de prompturi de sistem disponibile (reguli de comportament, șabloane de răspuns) sau instrucțiunile specifice unui prompt anume.

Parametri

ParametruTipDescriere
prompt_idintegerID-ul promptului pentru a extrage instrucțiunile (opțional).
keywordstringCuvânt cheie pentru a filtra prompturile disponibile (opțional).

Notă: Dacă este apelată fără parametri, funcția returnează lista primelor 20 de prompturi.

Exemple de Cod

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));