Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FINN_BACKENDNoSearch backend to use. The official backend is currently a stub.scraper
FINN_BASE_URLNoOverride for tests against a mock server only.https://www.finn.no
FINN_CACHE_DBNoPath to the search/listing cache database with a 24 hour cache.…/finn-mcp/cache.sqlite
FINN_CHROMIUMNoPath to a custom Chromium/Chrome binary.Playwright's Chromium
FINN_HEADLESSNoSet to 0 to show the browser for all calls for debugging.1
XDG_DATA_HOMENoBase directory for the browser profile, drafts, and cache.~/.local/share
FINN_PROFILE_DIRNoPersistent Chromium profile directory used to store your finn.no session.$XDG_DATA_HOME/finn-mcp/browser-profile

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
login_statusA

Check whether the saved browser profile is logged in to finn.no.

loginB

Open a visible browser window on finn.no so the USER can log in by hand.

Login is passwordless (e-mail + one-time code from login.vend.no). The assistant never types credentials. The session is kept in the local profile.

check_duplicateA

Check whether an item was already listed (locally or on the user's finn.no account).

    Call this BEFORE preparing a new ad. Local photos are matched by
    perceptual hash; finn.no ads (any state: active, sold, expired, draft)
    are matched by title.
    
confirm_not_duplicateA

Mark a draft as a genuinely different item so publish_draft stops blocking it.

    Only call after the USER said in chat that it is not the same item.
    
create_draftA

Create a LOCAL draft ad (nothing is sent to finn.no yet).

    Photos are auto-rotated, stripped of EXIF/GPS and resized; the first
    photo is the cover. category = numeric LEAF id (e.g. "43" Bærbar PC;
    use suggest_category after push_draft if unsure). condition: 1=Helt ny
    2=Som ny 3=Pent brukt 4=Godt brukt 5=Må fikses. trade_type: 1=Til salgs.
    Price is in whole NOK.

    PRICE POLICY: if the user named a price, use exactly that. Otherwise call
    suggest_price first and use its `suggested_price` (market median), and
    tell the user which comparables it is based on.
    
suggest_priceA

Market price for an item: median of comparable "Til salgs" ads on finn.no Torget.

    Default price source whenever the user did not name a price. `query` =
    short search words (brand + model, e.g. "DualSense PS5 kontroller").
    Outliers are dropped (IQR); result is rounded. Show the user the
    suggested price and a few of the `examples`.
    
update_draftC

Change fields of a local draft (e.g. {"price": 1500, "category": "43"}).

list_draftsB

List local drafts.

preview_draftA

Show a draft exactly as it would be sent to finn.no, plus blocking problems.

push_draftA

Upload a local draft to finn.no as a PRIVATE draft (not published, not visible).

    Creates the finn.no draft if needed, uploads photos, saves the fields and
    returns finn.no's own validation (`violations`). Safe to call repeatedly.
    
suggest_categoryA

finn.no's category suggestions based on the draft's uploaded photos (needs push_draft first).

publish_draftA

Publish a draft on finn.no. PUBLIC.

    Flow: duplicate check (local + finn.no account) -> push as private draft
    -> finn.no validation -> only with confirm=true: publish.
    Call with confirm=true ONLY after the user saw the preview and said yes in chat.
    
my_adsC

List the user's ads on finn.no ("Mine annonser") with state and available actions.

    facet: ALL or DRAFT (confirmed); the response's `facets` lists the others.
    
ad_actionA

Run an action finn.no offers for one of the user's ads (names come from my_ads, e.g. DELETE).

    Anything that changes the ad (DELETE, mark sold, deactivate ...) needs
    confirm=true, given only after the user explicitly agreed in chat.
    DELETE is permanent.
    
search_finnA

Search finn.no within a vertical.

``vertical`` is one of: ``bap`` (Torget / used goods), ``homes`` (real
estate for sale), ``lettings`` (real estate for rent), ``cars_used``,
``cars_new`` (not yet supported by the scraper backend), ``jobs``.

``query`` is a free-text keyword. ``filters`` is a dict of extra
URL-query parameters understood by finn.no (e.g. ``{"price_to":"300000"}``
for cars, ``{"location":"1.20001.20061"}`` for Oslo).

Returns up to ~50 ``SearchResult`` entries. Fewer if finn.no returned
fewer matches; an empty list is a valid result.
get_listingA

Fetch a full listing by its finnkode.

If ``vertical`` is omitted the server tries a cache hint first, then
probes each vertical until one returns a valid page. Results are cached
for 24 hours in a local SQLite database.
save_searchB

Persist a named search for repeated monitoring via check_saved_search.

list_saved_searchesA

Return every saved search in the local store, ordered by name.

delete_saved_searchA

Delete a saved search by name. Returns True if it existed.

check_saved_searchA

Run a saved search, return only listings that are new since the last check.

Updates the saved search's ``last_checked_at`` and ``last_finnkodes``.
On the first call all current results are "new".

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target clearly distinct resources and lifecycle steps (drafting, publishing, ad actions, search, saved searches, auth). The only plausible confusion is between push_draft, publish_draft, and ad_action, but descriptions explicitly distinguish private upload vs public publish vs post-publish actions, so boundaries remain clear.

Naming Consistency4/5

The dominant pattern is verb_noun (list_drafts, preview_draft, create_draft, update_draft, push_draft, publish_draft, suggest_price, save_search, check_duplicate, search_finn, get_listing). A few deviations exist (ad_action, my_ads, login_status, bare-verb login), but they remain readable and contextually obvious.

Tool Count4/5

20 tools is on the heavy side, but the server genuinely spans several distinct capabilities—auth, local drafting, publishing, marketplace search, and saved-search monitoring—and no tool appears redundant. Slightly over what a single-purpose server would need, but reasonable for this scope.

Completeness4/5

The seller lifecycle is well covered: create/update/preview drafts, category and price suggestions, duplicate detection, private push, publish, and ad actions plus listing/browse/saved-search CRUD. Minor gaps exist (no single-draft getter, no buyer messaging, no explicit photo curation tool), but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues