Husker du da AI bare svarte på spørsmål? De dagene er forbi. Moderne AI-modeller kan nå handle på dine vegne – og nøkkelkonseptet bak det heter tools.
Denne artikkelen forklarer hva tools er, hvordan de fungerer under panseret, og – viktig – hvordan de skiller seg fra MCP som vi dekket i forrige sak.
Tenk på det som å ansette en assistent
Assistenten med liste over hva hen kan gjøre
Se for deg at du ansetter en ny assistent på kontoret. Første dag gir du dem en liste: «Du kan ringe leverandører, bestille møterom, slå opp priser i systemet, og sende e-post. Spørsmål om økonomi håndterer du ikke – det er regnskapsavdelingens ansvar.»
Denne listen er tools. Det er en presis oversikt over hva AI-assistenten har lov til å gjøre, hva den kan bruke, og hva den ikke skal røre.
Uten listen kan assistenten bare prate med deg. Med listen kan de faktisk utrette noe.
I praksis: tools er funksjoner som AI-modellen kan velge å kalle på under en samtale. Modellen bestemmer selv om og når et tool er relevant – og kaller det med de parameterne den tror er riktige.
Hva er egentlig et tool?
Et tool er teknisk sett bare en funksjon med tre ting:
Et unikt navn som AI-en bruker for å identifisere og kalle verktøyet. F.eks. søk_i_kalender eller hent_vær.
En forklaring på hva verktøyet gjør, skrevet i klartekst. Dette er hva AI-en leser for å avgjøre om den skal bruke det.
Hvilke verdier funksjonen trenger for å kjøre – og hvilke som er påkrevde vs. valgfrie.
Når du sender en melding til en AI-modell som har tools tilgjengelig, går modellen gjennom en intern vurdering: «Kan jeg svare på dette direkte, eller trenger jeg å bruke et verktøy?» Hvis den bestemmer seg for å bruke et tool, returnerer den ikke tekst – den returnerer et «kall» med argumenter. Det er opp til applikasjonen å faktisk kjøre funksjonen og gi svaret tilbake til modellen.
Slik ser flyten ut
Legg merke til at AI-modellen selv ikke henter værmeldingen. Den sier bare «jeg vil bruke dette verktøyet med disse argumentene» – og overlater den faktiske kjøringen til koden rundt seg.
Tools du møter i praksis
Nettsøk TOOL
Claude søker på nettet når du spør om noe den ikke vet. Den kaller web_search med søkeordet ditt, leser resultatene, og svarer basert på ferskt innhold – ikke bare treningsdata.
Kodekjøring TOOL
«Regn ut hvor mange dager til 17. mai.» I stedet for å gjette, kjører AI-en Python-kode i et sandkasse-miljø og returnerer det faktiske svaret.
Fil- og databehandling TOOL
Last opp en CSV og spør «hva er gjennomsnittsverdien i kolonne B?». AI-en leser filen via et tool og gjør beregningen – ingen copy-paste fra deg.
Kalenderoppslag TOOL
«Finn en ledig time neste uke for et 30-minutters møte.» AI-en slår opp kalenderen via et tool og foreslår konkrete tidspunkter.
Hente en nettside TOOL
«Les og oppsummer denne artikkelen: [URL].» AI-en henter innholdet fra siden og presenterer det for deg – i stedet for å be deg lime det inn.
Tools og MCP – hva er forskjellen?
Her er en av tingene som oftest forvirrer: tools og MCP høres ut som det samme, men de opererer på forskjellige lag. La oss rydde opp.
Tools er mekanismen – den tekniske måten AI-en kan kalle en funksjon på. MCP er en transportstandard – en felles protokoll for å levere tools til AI-en fra eksterne systemer. MCP er altså bygget på toppen av tools, ikke ved siden av dem.
| Egenskap | Tools | MCP |
|---|---|---|
| Hva er det? | En funksjon AI-en kan kalle | En protokoll for å levere tools til AI |
| Hvem definerer? | Utvikleren av appen | Anthropic (åpen standard) |
| Hvor bor det? | I applikasjonskoden | I en separat MCP-server |
| Typisk bruk | Nettsøk, kodekjøring, egne API-kall | Koble til Slack, Notion, GitHub osv. |
| Krever oppsett? | Nei – kan sendes direkte i API-kallet | Ja – egen server må kjøre og konfigureres |
| Gjenbrukbar? | Kun i denne appen | Ja – samme server kan brukes av alle klienter |
Busslinje vs. buss-standard
Et tool er som én bussrute – definert av den som trenger den, for akkurat det formålet. MCP er som en nasjonal bussstandard som gjør at alle bussene fra alle selskaper kan bruke samme holdeplass, samme billettsystem og samme skilt.
MCP-tools er altså tools som er pakket inn i MCP-standarden – slik at de kan deles og gjenbrukes på tvers av alle AI-assistenter som støtter protokollen.
Konkret eksempel på samspillet
Forestill deg at du ber Claude: «Finn e-posten fra Kari og lag en oppgave i Notion basert på den.» Her skjer følgende:
Gmail MCP-server MCP
Claude kaller hent_epost-tool som er eksponert via Gmail MCP-serveren. Den henter e-posten fra Kari.
Notion MCP-server MCP
Claude kaller opprett_side-tool fra Notion MCP-serveren. Den lager en ny oppgave med innholdet fra e-posten.
Begge er tools, men levert via MCP TOOL
Fra Claude sin side er det bare to tool-kall. At de er implementert som MCP-servere er et infrastrukturdetail – ikke noe Claude «ser».
Slik definerer du et tool i kode
La oss se på hvordan du faktisk sender tools til Claude via API. Her er et komplett eksempel som gir Claude tilgang til å sjekke løpsøkter:
import anthropic import json client = anthropic.Anthropic() # Definér tools som en liste av dicts tools = [ { "name": "hent_treningsokt", "description": """Henter treningsøkter fra loggen. Bruk dette når brukeren spør om trening, løpeøkter, kondisjon eller treningshistorikk.""", "input_schema": { "type": "object", "properties": { "antall": { "type": "integer", "description": "Antall øktene å hente, standard 5" }, "type": { "type": "string", "enum": ["løp", "sykling", "alle"], "description": "Type økt å filtrere på" } }, "required": [] } } ] # Simulert database-funksjon def hent_treningsokt(antall=5, type="alle"): data = [ {"dato": "2025-03-10", "type": "løp", "km": 12.4}, {"dato": "2025-03-08", "type": "sykling", "km": 32.0}, ] if type != "alle": data = [o for o in data if o["type"] == type] return json.dumps(data[:antall], ensure_ascii=False) # Første kall til Claude response = client.messages.create( model="claude-opus-4-5", max_tokens=1024, tools=tools, messages=[{ "role": "user", "content": "Hva var de tre siste løpeturene mine?" }] ) # Claude returnerer et tool-kall, ikke tekst if response.stop_reason == "tool_use": tool_call = response.content[1] # tool_use-blokken args = tool_call.input # Vi kjører funksjonen selv resultat = hent_treningsokt(**args) # Send resultatet tilbake til Claude final = client.messages.create( model="claude-opus-4-5", max_tokens=1024, tools=tools, messages=[ {"role": "user", "content": "Hva var de tre siste løpeturene mine?"}, {"role": "assistant", "content": response.content}, { "role": "user", "content": [{ "type": "tool_result", "tool_use_id": tool_call.id, "content": resultat }] } ] ) print(final.content[0].text)
Det viktige å se her: Claude returnerer ikke svaret direkte. Den sier «bruk dette tool med disse argumentene», vi kjører funksjonen, og sender resultatet tilbake. Først da formulerer Claude et svar til brukeren.
Slik skriver du gode tools
-
Beskrivelsen er det viktigste. AI-en leser beskrivelsen for å avgjøre om den skal bruke toolet. Vag beskrivelse = feil bruk. Vær konkret om når det er relevant å kalle toolet, ikke bare hva det gjør.
-
Navn som sier hva det gjør.
hent_kundedataer bra.funksjon_1er ubrukelig. AI-en bruker navnet som hint når den vurderer tools. -
Bruk enum for begrensede valg. Hvis en parameter bare kan være tre ting, definer dem som en enum. Da kan ikke AI-en «finne på» ugyldige verdier.
-
Returner strukturert data, ikke prosa. Tools bør returnere JSON eller tall – ikke «Her er svaret ditt: 12.4 km». La Claude formulere det endelige svaret basert på rådata.
-
Hold toolsettet lite. Med for mange tools kan AI-en bli usikker og velge feil. Gi den 3–8 velfokuserte tools fremfor 30 overlappende.
-
Ha timeout og feilhåndtering. Tools kaller ofte eksterne tjenester. Sett alltid en timeout, og returner meningsfull feilmelding hvis noe går galt – ikke bare
None.
Tools + MCP = AI som faktisk jobber
For å oppsummere det hele i én setning: tools er motoren, MCP er veien ut til verden.
Tools gir AI-en evnen til å handle. MCP gir den en standardisert måte å koble seg til alle systemene vi allerede bruker. Brukt sammen er dette det som gjør AI til en faktisk kollega – ikke bare en veldig rask søkemotor.
Neste gang du ser at Claude søker på nettet, kjører et regnestykke, eller oppretter en kalenderinvitasjon – nå vet du hva som skjer bak kulissene.
Magnus Valmot er dataingeniør og AI-rådgiver i Dataviter. Han hjelper virksomheter med å gå fra data til verdi – ett integrasjonspunkt om gangen.