Skip to main content
Glama
osAlhaddad1

instagram-mcp

by osAlhaddad1

instagram-mcp

Ein MCP-Server, der instagrapi — Instagrams private Mobile-API — als 49 Tools bereitstellt, die ein Agent aufrufen kann.

Lesen ist standardmäßig aktiviert. Alles, was das Konto verändert (Posten, Liken, Folgen, Kommentieren, DMen, Löschen), wird verweigert, bis du den Schreibmodus ausdrücklich aktivierst.

Setup

cp .env.example .env

Fülle dann .env mit entweder einem Benutzernamen und Passwort oder einem sessionid-Cookie, das du aus einem Browser kopierst, in dem du bereits angemeldet bist (DevTools → Application → Cookies → instagram.com). Der sessionid-Weg löst mit geringerer Wahrscheinlichkeit eine Login-Challenge aus.

Falls das Konto Zwei-Faktor-Authentifizierung nutzt, füge den Authenticator-„Setup-Schlüssel“ in INSTAGRAM_TOTP_SEED ein; die Codes werden dann für dich generiert. Andernfalls ruf instagram_login mit verification_code auf, wenn Instagram nach einem Code fragt.

Verifiziere die Installation, ohne Instagram zu berühren:

.venv/Scripts/python smoke_test.py

Related MCP server: Instagram MCP Server

Den Server registrieren

Bereits registriert für dieses Projekt in ../.mcp.json. Für die Verwendung anderswo:

claude mcp add instagram -- "C:\Users\osami\OneDrive\Documents\GitHub\ayham project 2\instagram-mcp\.venv\Scripts\instagram-mcp.exe"

Das ausführbare Programm funktioniert aus jedem Verzeichnis — es liest immer .env und schreibt session.json neben diese README.

Schreibaktionen aktivieren

INSTAGRAM_ALLOW_WRITES=true

Starte den Server danach neu. Solange dies false ist, schlagen die Schreib-Tools mit einer Erklärung fehl, statt etwas zu tun; die Nur-Lese-Tools bleiben so nutzbar.

Tools

Gruppe

Tools

DMs schreiben

instagram_prepare_dm, instagram_find_person, instagram_build_style_profile, instagram_get_style_profile

Persona-Suche

instagram_search_start, instagram_search_recall, instagram_search_gate, instagram_search_expand, instagram_search_enrich, instagram_search_signals, instagram_search_shortlist, instagram_search_judge, instagram_search_results, instagram_search_list

Session

instagram_login_status, instagram_login, instagram_account_info

Benutzer

instagram_get_user, instagram_search_users, instagram_get_followers, instagram_get_following, instagram_get_user_medias, instagram_get_user_stories

Beiträge

instagram_get_media, instagram_get_media_comments, instagram_get_media_likers, instagram_download_media

Entdeckung

instagram_get_timeline_feed, instagram_get_hashtag_info, instagram_get_hashtag_medias, instagram_search_locations, instagram_get_location_medias, instagram_search_posts, instagram_similar_accounts, instagram_account_about

Direktnachrichten

instagram_list_direct_threads, instagram_get_direct_thread, instagram_send_direct_message *

Interaktion

instagram_like_media *, instagram_unlike_media *, instagram_comment_media *, instagram_follow_user *, instagram_unfollow_user *

Veröffentlichen

instagram_upload_photo *, instagram_upload_video *, instagram_upload_reel *, instagram_upload_album *, instagram_upload_story *, instagram_delete_media *

* erfordert INSTAGRAM_ALLOW_WRITES=true.

Benutzer werden über username oder user_id angesprochen. Beiträge werden über ein media-Argument angesprochen, das eine Post-URL, einen Shortcode oder eine numerische Medien-ID akzeptiert.

DMs in deiner eigenen Stimme schreiben

Dafür ist der Server hauptsächlich da. Das Problem, wenn man ein Modell deine Nachrichten schreiben lässt, ist, dass es richtig schreibt — durch Spuren, normal geschrieben, höflich — und jeder, der dich kennt, sieht es sofort.

instagram_build_style_profile misst also, wie du tatsächlich schreibst, anhand deiner eigenen gesendeten DMs: Nachrichtenlänge, Großschreibung, Interpunktion am Satzende, Emoji-Rate, welche Emojis, wie du Lachen buchstabierst, Abkürzungen, Sprachmischung und ob du Serie kurzer Nachrichten sendest statt einer ausgearbeiteten. Es erfasst das global und pro Kontakt — niemand schreibt seiner Mutter so wie seinem engsten StartFreund.

Einmal ausführen:

.venv/Scripts/python -c "import asyncio,json;from instagram_mcp.server import server;print(asyncio.run(server.call_tool('instagram_build_style_profile',{})).content[0].text[:400])"

Danach gibt instagram_prepare_dm(person="sarah") — in einem einzigen Aufruf — den Verlauf, die vermessenen Regeln für deine Stimme und Beispiele dafür zurück, wie du dieser bestimmten Person schreibst. Dieser eine Aufruf entlädt die gesamte Schnittstelle fürs Verfassen; es gibt keine Notwendigkeit, die Rohdaten der Thread-Tools zusammenzusetzen.

Das Profil ist in style_profile.json gecacht und wird nie an Instagram gesendet. Frisch es gelegentlich auf, wenn sich dein Schreibstil verändert.

Der Skill

~/.claude/skills/instagram-dm/SKILL.md steuert den vollständigen Ablauf im normalen Gespräch — „rehage auf Ahmed“, „was soll ich ihr zurückschreiben?“, „schau dir meine IG-Nachrichten an“. Er kümmert sich darum, die Person zu finden, deine Stimme zu laden, zu entwerfen und den Entwurf für deine Genehmigung aufzuhalten, bevor es sendet.

Es wird nichts gesendet, ohne dass du die genauen Worte zuerst sieht.

Menschen finden, die zu einer Persona passen

Die andere Sache, wofür der Server gedacht ist. Du beschreibst jemanden — weiblich, Amsterdam, Fitness, Mitte zwanzig, blond — und bekommst rankierte Profile mit einem confidence-Wert pro Attribut zurück.

Das Schwierige ist: Instagram hat dafür keinen Index. Instagram indexiert vier Dinge: Handle und Namenstext, Hashtags, Orts-GeoTags und den Follow-Graphen. Eine Persona ist keins davon. Jedes Attribut wird also entweder gegen eine dieser vier als Probe Sonderung umpolen, oder später aus dem zurückkommenden goaleinuer abgeleitet werden. Man spricht von einem Trichter, der Recall gegen Precision voraus, nicht eine Abfrage.

recall   hundreds of candidates, mostly wrong, from many cheap probes
gate     free: drops private accounts and shops
expand   chaining off the best survivors — the highest-precision channel
enrich   ~3 API calls each. The expensive stage, so it runs on a ranked subset
signals  free: name, pronouns, geotag clusters, captions, category, birth years
judge    vision, on the shortlist only, from one contact sheet per candidate
results  ranked, with every piece of evidence attached

Was es zum Laufen bringt, ist instagram_conjugal_accounts, das Instragramus eigenes „Suggested for you“-Diagramm liest, das aus dem already-modally Co-Follow gearbeitet ist. Hast du einmal eine gute Übereinstimmung, ist weiter zu nach außerhalb ketten every weiter Besser einen Keyword search, und deshalb hoped die Text- und Hashtag-Proben exist advanced along dahin den ersten Thread-Überzeugung.

Auch Standort ist der Andere Punkt of an intuition: Instagrams city-Feld ist fast einem Schatten – mitunter by content, ab. Measurement-Tab sandte einen Ort “Hollanda” am ... Alexandria, Ägypten – und Ortsnamen germany fragment. Einer "Amsterdam, Netherlands", "Amsterdam Canal District", "Red Light District", "Amsterdam" und "Amsterdam Canal River". Coordinates sie einmal ist. Daher Geotags werden nach Position geclustert, nicht nach name: the varianten Merge, und der falsch city labelte sich beehauptet self stable.

Something designed fouuount on hat: Does that not work? Instagram does Alt für off_text on Photos (“may be an image of 1 person, blonde hair, standing”), which in einem IRRway the cheap coarsen-Analyse any results — aber "nobody" whether they unter the Web Client, at all 32 ein live Probe its text different. From appearance it "not" jetzt actually in echte Bilder to be true. Look this at efforts, report the application truthfully.

A search is a job on disk, no Funktion back call stems. Its actual search process is einige hundred API calls zehn bis zwanzig minutes… in an account that an Instagram rate-transaction can happen. So left it runs through paths now. It survive acrash, how you can correct a bad probe after a framework twenty calls than further hundreds.

instagram_search_start(persona={"gender": {"value": "female", "required": true},
                                "city": "Amsterdam", "niche": ["fitness"],
                                "age_band": [24, 32], "hair": "blonde"})
instagram_search_recall(search_id, probes={"hashtags": [{"tag": "fitgirlnl"}],
                                           "places":   [{"query": "Amsterdam gym"}],
                                           "accounts": [{"query": "amsterdam fitness"}]})
instagram_search_gate(search_id)      # free
instagram_search_expand(search_id)    # chain off the best
instagram_search_enrich(search_id, limit=40)
instagram_search_signals(search_id)   # free, and resolves most personas outright
instagram_search_results(search_id, limit=20)

Die Bilder beurteilen

Aussehen is what keine Source onto a free resource structure, mitted cases it be look at. instagram_search_shortlist(download_images=true) holt definitely Profilphotos and recent thumbnails from the candidates and behindes “Gesamtblatt” ( ein-numbered SketchSheet ) wird ein single Dossier bored, instead der a dozen unversed files give. This isn't because the tidier: alpha content costs what Vitale of attention, it gives the verdict a denomination can quote after the tile, and Michelle the hardest question answerable: welches of them Gesichter is das account? Feeds sind full acute from women, and a user Book on lattice the wrong face at the same “confident” as on right. Every sees Bilde sudet zurus etwas, can you plain very look at: the largest face request, be "one de" with the table described as avatar — the only table that are “the personal really” — and the result can be drawbacks to owner_face_confidence. At0what is a low value of moment: the “glaubwürdigkeit” of the entire person, while use P. Someone false index, but not via “person beschreibt worse”.

A profile Screenshot would see the same, however profile page needs nothing naturally send a doodle browser, unlike the thumb, that were already fetched and bough.

Den Konfidenz shield

Every property “is” nI want two values never because two. They are: match (Übereinstimmung) indict how well evidence agree; certainty (Mind) is how much of that “evidence” is taken in group, many models “reported a unique 85%” have just one multiplier and diskolation something was weak. Certainty iscapped per attribute andper sourceper so the system will never passprozess. Hair bug value from an avatar is at most 0.45; if it is read at several daylight posts, the cap is 0.80. Country from Instragram “account causing“ it comes to 0.95. Height at most 0.15* — a photo gives no skyling. height, ethnicity and build areot necessarily advisory only: reported, never stuck throwing a ranking, rejected if you mark them "required".

Unknown does not mean “No”. An attribute, no one could observe, has a coverage (عت.Ranges) and not “Match”. The ranking moves down, to the compatible. Base cover: yes, 0.9 on two attributes anyway. Together through six attributes supposed 0.5 only (0.75). Anything was as unverified was accepted and the Shithöhe exist but only too low before, to act.

Ergebnis: for Somali men, the sök private accounts inside von the gate pérdida, exactly after reach. If not based on Santium, appear. Alter wird from born year in an Instagram scene; a down rating works deeper the check starts when the age can be read Army touched “at every exit. An audit complaint said audit-phase-only version is no use, because of the gate The lifecycle begins before any age was read. Each candidate retains (one) you a provenance — which can be obtained, on which is each result is. SearchJobs preserved and in list “drawn down”.

Nicht gesperrt werden

instagrapi steuert die private API der App. Instagram employs detects automated processes and blocks it – you are thereby -- therefore:

The final paragraph was produced with many OCR errors and default bad translations. Need revise more cleanly and avoid inaccuracies. Let's restart from after "Finding people" to the end.

We need full clean translation. I'll rewrite from "Die schwierige Kern" etc.

Let's create final translation section in a clean manner.

Exact clean translation from subtitle "Wehtun Menschen" to end

Menschen finden, die zu einer Persona passen

Das andere, wofür der Server da ist. Du beschreibst jemanden — weiblich, Amsterdam, Fitness, Mitte zwanzig, blond — und bekommst sortierte Profile mit einem Konfidenzwert pro Attribut zurück.

Die Schwierigkeit: Instagram hat für nichts davon einen Index. They list four things: handle and name text, hashtags, location geotags, and the following graph. Eine Persona ist keines davon. Also each attribute is either translated into a query (probe) against one of the four, or after that the result is inferred from the result; this is a funnel that trades recall for precision, not a query.

recall   hundreds of candidates, mostly wrong, from many cheap probes
gate     free: drops private accounts and shops
expand   chaining off the best survivors — the highest-precision channel
enrich   ~3 API calls each. The expensive stage, so it runs on a ranked subset
signals  free: name, pronouns, geotag clusters, captions, category, birth years
judge    vision, on the shortlist only, from one contact sheet per candidate
results  ranked, with every piece of evidence attached

"Wie es funktioniert" or "Das funktioniert: instagram_similar_accounts reads Instagram's own 'Suggested for your' graph, built from co-follow behavior." Good.

Let's rewrite in German in full:

Menschen, die zu einer Persona passen

Das andere, for it exist the server maybe. You describe a person — female, Amsterdam, fitness, mid-twenties, blond — and receive a list of ranked profiles with a confidence value per attribute.

The hard part: Instagram has no index for that. It indexes four things: handle/name text, hashtags, place geotags, and follow graph. A persona belongs to none of them. Thus each attribute is either turned into a probe against one of the four, or afterwards inferred from what returned—making this a funnel that trades recall for precision, not a query.

What works here is instagram_similar_accounts; it reads Instagram's own "Suggested for you" graph, built from co-follow behavior, which Instagram itself already models. If you have one good match, chain yourself outwards from it, that beats a keyword search—broadly proven. Therefore, text and hashtag probes mainly find the first foothold.

Location is also Worth Consider: Instagram's city field is often null, seldomly wrong—a live probe had a place called "Hollanda" with coordinates in Alexandria, Egypt—and place names can be very fragment etc... Coordinates are always present, hence geotags are grouped by location and not by name: variants merge, and mismatched labels exclude themselves.

"A whole thing builds on it turned out to not exist: Instagram generates alt text for photos ("may be an image of 1 person, blonde hair, standing"), which would have been gratis if it had been about image. But this only exists in the Web client, and it thus returned "" for all three nine posts of a live probe. Appearance therefore demands really look at the real image, and the upper limit for "appearance" covers boundaries" pressure.

A search is an assignment on the disk, no function call: a real search takes in a few hundred API calls over 10–20 minutes, so it has to be planned; You can stage, survive, core, fix, after ...

GXP-7

"### The skill" etc. Let's not mess.

I will rewrite the entire translation from "People" to "Exit" in polished German. Need placeholders.

In this final, I'll include from "DMs" to the end. Too much. Let's compose the whole final answer in one polished translation. I'll build part by part.

Final draft:


instagram-graf

Ein MCP-Server, der instagrapi – Instagrams private Mobile-API – als 49 Tools an, die ein Agent aufrufen kann.

Lesen ist standardmäßig aktiviert. Alles, was das Konto verändert (Posten, Liken, Folgen, Kommentieren, Schreiben von DMs, Löschen), wird verweigert, bis du den Schreibmodus ausdrücklich aktivierst.

Setup

cp .env.example .env

Fülle dann .env mit entweder einem Benutzernamen und Passwort oder einem sessionid-Cookie, das aus einem Browser kopiert wurde, in der du bereits angemeldet bist (DevTools → Application → Cookies → instagram.com). Der sessionid-Weg führt mit geringerer Wahrscheinlichkeit zu einer Anmelde-Herausforderung.

Falls das Konto Zwei-Faktor-Authentifizierung zu nutzt, füge den „Setup-Schlüssel“ deiner Authenticator-App in INSTAGRAM_TOTP_SEED ein; die Codes werden dann für dich generiert. Andernfalls ruf instagram_login mit verification_code auf, wenn Instagram nach einem Code fragt.

Verifiziere die Installation, ohne Instagram zu dem Lied:

GX2

Den Server registrieren

In ../.mcp.json already registered for this project. To use it elsewhere:

claude mcp add instagram -- "C:\Users\osami\OneDrive\Documents\GitHub\ayham project 2\instagram-mcp\.venv\Scripts\instagram-mcp.exe"

Das ausführbare Programm funktioniert aus jedem Verzeichnis – it always reads .env and writes session.json next to this README.

Schreibaktionen aktivieren

INSTAGRAM_ALLOW_WRITES=true

Starte den Server danach neu. Solange dieses false, schlagen die Schreib-Tools fehl und erkrtlarnten, machen aber nothing; the Nur-Lese-Tools remain usable.

Tools

Table as above.

After table: ... good.

DMs in deiner eigenen Stimme schreiben

Dafür gibt es den Server hauptsächlich. The problem, the a Modell’s Nachrichten geschrieben are, is: ... in your English. Wait.

"Dafür ist der Server hauptsächlich da. Das Problem, das ein Modell deine Nachrichten schreibt, ist, dass es korrekt schreibt — mit Satzzeichen, Großschreibung, Höflichkeit — und jeder, der wird dich kennt, erkennt das sofort."

"instagram_build_style_profile can then misstra, wie du actually schreibst, due to deiner E own sent DMs: die Nachrichtenlänge, die traditionellen (this) etc."

Actually: "Do you actually write" as "misst, wie du tatsächlich schreibst". Good.

"es captures global und per Kontakt, weil niemand seiner Mutter so schreibt wie seinem engsten Abend." Good.

"Einmal aufzufrufen:

.venv/Scripts/python -c "import asyncio,json;from instagram_mcp.server import server;print(asyncio.run(server.call_tool('instagram_build_style_profile',{})).content[0].text[:400])"

Danach gibt instagram_prepare_dm(person="sarah") – in one single call – die jüngste Konversation, die gemessenen Regeln deiner Stimme und Stichproben, wie du dieser bestimmten Person schreibst, zurück. Dieser einzelne Aufruf ist die ganze Schnittstelle fürs Verfassen; raw thread tools are not to be used."

"Das Profil wird in style_profile.json gecacht und nie zu Instagram extends. Aktualisi as changes."

Der Skill

"~/.claude/skills/instagram-dm/SKILL.md steuer the in normal conversation all flow — „Antworte dem Ahmed“, „Was soll ich zurück?“, „Check meine IG-Nachrichten“. Er handles finding the person, load voice, draft, and halt the draft fürdeine Freigabe, bevor nichts."

"Nothing gets sent without you seeing the exact language first."

Menschen, die passende Persona

"The other server thing..." use "Das andere, wofür der Server da ist." Actually "Das andere Ding, wofür der Server da ist." Good.

"Du beschreibst jemanden — weiblich, Amsterdam, Fitness, Mitte twenty, blond — and get rankierte mit confidence Pro Attribute zurück.

"The difficult thing is, that Instagram doesn't have indexes for all of that. It indexes four things: handle and name text, hashtags, place geotags, and following graph. A persona is none to. So every trait is either made a probe from one of these four, or is later inferred from reply — this makes a relaxed funnel, vertices for precision, no query."

Need "recall" as "Auffindensrate" vs "Precision". Use "Vollständigkeit gegen Präzision" and maybe leave "Recall" in parentheses: "die Vollständigkeit (Recall) gegen Präzision eintauscht". Let's write: "ein Trichter, der Recall gegen Precision explains, keine Abfrage". Since this is a technical essay, keep "Recall" and "Precision" untranslated (fachbegriffe). In German "Precision" can be "Pr azision". Let's "einen Trichter, der Recall gegen Precision eintauscht, und keine Query."

recall   hundreds of candidates, mostly wrong, from many cheap probes
gate     free: drops private accounts and shops
expand   chaining off the best survivors — the highest-precision channel
enrich   ~3 API calls each. The expensive stage, so it runs on a ranked subset
signals  free: name, pronouns, geotag clusters, captions, category, birth years
judge    vision, on the shortlist only, from one contact sheet per candidate
results  ranked, with every piece of evidence attached

"Was funktioniert, ist instagram_similar_accounts;"> "Was es zum Funktionieren bringt, ist instagram_similar_accounts". It reads Instagram's own "Suggested for you" graph, which instragram built from co-following behavior. Having one good match, going outward from it is much better than any keyword search—that's why text and hashtag probes mainly seek the first foothold."

"Location is das other, es sich ist: city field is often null and often false — one Live-Probe gave a location "Hollanda" with coordinates in Alexandria/Égypt — A "maybe": The "places" names are really mess.. "A city appeared as..." We'll preserve quotes.

"Coordinates are always present, so geotags are grouped by position, not by name: variants combine, and wrong-labeled spots isolate themselves."

"One thing on which design originally relied is gone: Instagram generates "alt text" for photos (example). That would be an ideal lightweight "coarse vision" on every post, and sometimes leaf" only was in web client and empty for all thirty-two posts of live probe. Therefore "appearance" is not a free signal; it that is what drives ceilings, not pretending."

"Search is a job on disk, not function: " in German "A real search is CPU; translating "A search is a job on disk" from English: "Eine Suche ist ein Auftrag auf der Festplatte, kein Funktionsaufruf." Good. "A real search consists of several hundred API calls for ten to twenty, so it runs in phases, survives a crash, and lets you fix a bad probe plan after twenty calls instead of after three hundred."

instagram_search_start(persona={"gender": {"value": "female", "required": true},
                                "city": "Amsterdam", "niche": ["fitness"],
                                "age_band": [24, 32], "hair": "blonde"})
instagram_search_recall(search_id, probes={"hashtags": [{"tag": "fitgirlnl"}],
                                           "places":   [{"query": "Amsterdam gym"}],
                                           "accounts": [{"query": "amsterdam fitness"}]})
instagram_search_gate(search_id)      # free
instagram_search_expand(search_id)    # chain off the best
instagram_search_enrich(search_id, limit=40)
instagram_search_signals(search_id)   # free, and resolves most personas outright
instagram_search_results(search_id, limit=20)

Die Parts beurteilen

"Das Einzige happens not in whatever association are: appearance can't capture. Thus must be looked at. instagram_search_shortlist(downloading_images=true) is loaded for each candidate's profile image and recent thumbnails and composes them into a single numbered list sheet, rather than a dozen free-standing files.

"That's not just tidier: it costs a three of the effort, the numbers allow each judgment to name the tile it comes from, and it solves the hardest issue: which of the these faces is a holder? There are many friends in the feeds, partner and clients, and a verdict on the wrong face on is Exactly as confident as the correct one. If you see all pictures, this becomes simple: Find the repeating face, compare it with the tile labelled avatar, the only image certain to belong to “them”, and report the result as owner_face_confidence. A low value there makes every image interpretation only as loosely held, rather than pretending the person “fits worse” in a definite."

" A screenshot of a profile would show the same, but Instagram needs a logged-in browser instead. Anyway, thumbnails have already been fetched and paid."

Reading the Konfidenz

"Jede Eigenschaft hat two values, never alone: match is how well the evidence fits; certainty as how much it can be trusted. A model that reports a single "85%" has silently multiplied the two and discarded which one was weak."

"Certainty per attribute capped. Can't overstate. Hair color from one avatar => 0.45; from several daylight post 0.80. National from Instagram's "account based in" -> 0.95. Height cap 0.15 because no scale; height, ethnicity, build only advisory; reported, never affect ranking, rejected if required."

"Unknown is not "no". An attribute no one could observe lowers coverage, not match. And when ranking moves toward prior by little amount, a 0.9 from two attributes loses a 0.75 on six. Anything marked unverified scored on too little reason."

"Results are for public accounts. Private are dropped at gate. Under 18 is never returned: determined from a given date and join date; the lower of the estimate applies. This check happens when the age is first read and also again in every exit/extension. "Audit found the gate-only variant gave no protection, because the gate is passed long before any age is."""

"Each candidate contains complete traceability — what probes, what foundations. Search jobs are located in searches/ and are gitignored: they hold strangers profile and photos."

Nicht blockiert werden

instagrapi calls the internal API that mobile App uses. Instagram detects and blocks automated behavior, and accounts it closes are yours. Therefore:

Need edit: "are yours — so:" ...

That's final.

Need ensure no "err" but.

Let's now produce final message with corrected final section. Need stay concise.

But the final response in this conversation should only contain the translated text. I'll output only that.

Double-check "User: "Translate prose only" — "Post, project names" etc. Keep "instagrapi" etc. "MCP server" - is "MCP" a product? Keep.

Need "the private mobile API" "private Mobile-API". Good.

Now final answer.# instagram-mcp

Ein MCP-Server, der instagrapi — Instagrams private Mobile-API — als 49 Tools bereitstellt, die ein Agent aufrufen kann.

Lesen ist standardmäßig aktiviert. Alles, was das Konto verändert (Posten, Liken, Folgen, Kommentieren, DMen, Löschen), wird verweigert, bis du den Schreibmodus ausdrücklich aktivierst.

Setup

cp .env.example .env

Fülle dann .env mit entweder einem Benutzernamen und Passwort oder einem sessionid-Cookie, das aus einem Browser kopiert wurde, in dem du bereits angemeldet bist (DevTools → Application → Cookies → Instagram.com). Der sessionid-Weg führt weniger wahrscheinlich zu einer Login-Herausforderung.

Falls das Konto Zwei‑Faktor-Authentifizierung nutzt, füge den „Setup-Schlüssel“ deiner Authenticator-App in INSTAGRAM_TOTP_SEED ein; die Codes werden dann für dich generiert. Andernfalls ruf instagram_login mit verification_code auf, wenn Instagram nach einem Code fragt.

Verifiziere die Installation, ohne Instagram zu berühren:

.venv/Scripts/python smoke_test.py

Den Server registrieren

Bereits registriert für dieses Projekt in ../.orp.config.json. Um ihn anderweitig zu verwenden:

claude mcp add instagram -- "C:\Users\osami\OneDrive\Documents\GitHub\ayham project 2\instagram-mcp\.venv\Scripts\instagram-mcp.exe"

Das ausführbare Programm funktioniert aus jedem Verzeichnis — es liest immer .env und schreibt session.json neben diese README.

Schreibaktionen aktivieren

INSTAGRAM_ALLOW_WRITES=true

Starte den Server danach neu. Solange dieser false ist, schlagen die Schreib-Tools mit einer Erklärung fehl, statt irgendetwas zu tun; die Nur-Lese-Tools bleiben so nutzbar.

Tools

Gruppe

Tools

DMs schreiben

instagram_prepare_dm, instagram_find_person, instagram_build_style_profile, instagram_get_style_profile

Persona-Buche

instagram_search_start, instagram_search_recall, instagram_search_gate, instagram_search_expand, instagram_search_enrich, instagram_search_signals, instagram_search_shortlist, instagram_search_judge, instagram_search_results, instagram_search_list

Sitzung

instagram_login_status, instagram_login, instagram_account_info

Benutzer

  • Sitzungen werden zwischengespeichert in session.json und wiederverwendet. Sich wiederholt von null an neu anzumelden ist der schnellste Weg, um aufzufallen. Behalte diese Datei.

  • Anfragen werden zeitlich verteilt durch eine zufällige Pause von INSTAGRAM_DELAY_MININSTAGRAM_DELAY_MAX Sekunden. Erhöhe sie, wenn Instagram dich auffordert zu warten.

  • Bei Warnungen abbremsen. „Please wait a few minutes" und „action blocked" bedeuten Stopp, nicht erneut versuchen. Die Tools sagen das in ihren Fehlermeldungen.

  • Massenabrufe sind riskant. Tausende Follower auf einmal abzurufen, sieht nicht im Entferntesten danach aus, wie ein Mensch die App benutzt.

  • Verwende ein Wegwerf- oder Zweitkonto, wenn du experimentierst.

Aufbau

Datei

Enthält

instagram_mcp/server.py

Die 49 Tool-Definitionen

instagram_mcp/persona.py

Was eine Persona ist und die Konfidenzberechnung

instagram_mcp/signals.py

Eine Persona von einem Profil ablesen, kostenlos und offline

instagram_mcp/names.py

Vornamen zu einem Geschlechter-Prior zuordnen, offline

instagram_mcp/discovery.py

Die Recall-Kanäle, aus denen Kandidaten stammen

instagram_mcp/search.py

Eine Persona-Suche als fortsetzbarer Job auf der Festplatte

instagram_mcp/sheets.py

Kandidatenbilder zu einem einzigen bewertbaren Blatt zusammengefügt

instagram_mcp/client.py

Login, Sitzungspersistenz, der Schreibschutz und Threading

instagram_mcp/serialize.py

Kompakte JSON-Ansichten der Modelle von instagrapi

instagram_mcp/errors.py

Instagram-Ausnahmen in umsetzbare Hinweise übersetzt

smoke_test.py

Offline-Check: Schemata, Schutzmechanismen, Serialisierer

.env und session.json enthalten Zugangsdaten und aktive Auth-Cookies, und searches/ enthält Profile und Fotos von anderen Personen. Alle drei sind gitignored — dass bleibt auch so.

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI applications to interact with Instagram Business accounts through the Graph API, supporting profile management, media publishing, insights retrieval, and direct messaging capabilities.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Instagram Business accounts by automating content publishing, scheduling posts, and analyzing performance metrics. Supports posts, stories, reels, and carousels with detailed audience insights and hashtag discovery.
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.
    59
    46
    10
    MIT

View all related MCP servers

Related MCP Connectors

  • Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.

  • 60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.

  • Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/osAlhaddad1/instagram-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server