Skip to content

Hasheous Server

This project aims to match the content of DAT's like those provided by TOSEC and No-Intro to metadata provided by various vendors (IGDB only at present), to simplify identifying ROMs and other images when adding to ROM managers such as Hasheous's sister project Gaseous (https://github.com/gaseous-project/gaseous-server)

Hasheous is hosted at https://hasheous.org/

Features

  • Supports TOSEC, MAME, MESS, Redump, and No-Intro
  • Matches to the following metadata sources:
    • IGDB
    • VIMMS Lair Manual Project (provides scans of game manuals)
  • Proxies the following metadata sources:
    • IGDB
  • Provides an API for developers to submit fixes to data matching
  • Includes a hosted MCP endpoint in the Hasheous API for AI-assisted database queries
  • Supports supporter recognition through linked OpenCollective accounts
  • Supports profile-driven API rate limiting with hot-reloaded rules
  • Is completely free to use

Discord Server

Join our Discord server: https://discord.gg/Nhu7wpT3k4

Requirements

  • MariaDB 11.1.2 or greater
    • This is the database version Hasheous has been tested and developed against. Your mileage may vary with earlier versions.
  • Internet Game Database API Key. See: https://api-docs.igdb.com/#account-creation

Third Party Projects

The following projects are used by Hasheous

Configuration File

When Hasheous-Server is started for the first time, it creates a configuration file at ~/.hasheous-server/config.json if it doesn't exist. Some values can be filled in using environment variables (such as in the case of using docker).

Rate limiter rules are stored separately at ~/.hasheous-server/rate-limit-rules.json and are reloaded automatically every 5 minutes. See Rate Limiting.

DatabaseConfiguration

Attribute Environment Variable
HostName dbhost
UserName dbuser
Password dbpass

IGDBConfiguration

Attribute Environment Variable
ClientId igdbclientid
Secret. igdbclientsecret

SupporterRecognitionConfiguration

Attribute Environment Variable
OpenCollectiveClientId opencollectiveclientid
OpenCollectiveClientSecret opencollectiveclientsecret
OpenCollectiveApiToken opencollectiveapitoken
OpenCollectiveCollectiveSlug opencollectivecollectiveslug

When configuring OpenCollective OAuth linking, use this callback URL:

https://<your-hasheous-host>/signin-opencollective

config.json

{
  "DatabaseConfiguration": {
    "HostName": "localhost",
    "UserName": "hasheous",
    "Password": "hasheous",
    "DatabaseName": "hasheous",
    "Port": 3306
  },
  "IGDBConfiguration": {
    "ClientId": "<clientid>",
    "Secret": "<secret>"
  },
  "SupporterRecognitionConfiguration": {
    "OpenCollectiveClientId": "<clientid>",
    "OpenCollectiveClientSecret": "<clientsecret>",
    "OpenCollectiveApiToken": "<apitoken>",
    "OpenCollectiveCollectiveSlug": "hasheous",
    "ActiveContributionDays": 30
  },
  "LoggingConfiguration": {
    "DebugLogging": false,
    "LogRetention": 7
  }
}

Supporter Recognition

Supporter recognition is documented in Support Recognition.

Active supporters receive the Supporter role when their linked OpenCollective account has made a payment within the last 30 days.

Docker

Build and deploy a Docker image from source

Dockerfile and docker-compose-build.yml files have been provided to make deployment of the server as easy as possible.

  1. Clone the repo with git clone https://github.com/gaseous-project/hasheous.git
  2. Change into the hasheous directory
  3. Open the docker-compose--build.yml file and edit the igdbclientid and igdbclientsecret to the values retrieved from your IGDB account
  4. Run the command docker-compose --file docker-compose-build.yml up -d
  5. Connect to the host on port 7157

MCP Server

Full MCP documentation: MCP

Hasheous includes a hosted MCP JSON-RPC endpoint at:

POST /api/v1/Mcp

This endpoint is public and does not require authentication.

Discovery manifest:

GET /.well-known/mcp.json

Hasheous CLI still supports local stdio MCP mode:

dotnet run --project hasheous-cli -- mcp

Currently exposed MCP tools:

  • hasheous_search_games (search by game name + optional platform, includes ROM/hash data)
  • hasheous_get_game_details (full details for a specific game id)
  • hasheous_lookup_hashes (find matching games by CRC/MD5/SHA1/SHA256)

Rate Limiting

Rate limiting is documented in Rate Limiting.

Highlights:

  • rules are defined in ~/.hasheous-server/rate-limit-rules.json
  • rules are hot-reloaded every 5 minutes
  • built-in webpage traffic is automatically exempt
  • profiles can match on roles, origin, user agent, remote IP, and arbitrary headers

Adding Content

Currently supported DAT's:

If there are other DAT's you'd like to see support for, please raise an issue with a link to the DAT's.

Adding signature DAT files

TOSEC

  1. Download the DAT files from the source website. For example; from https://www.tosecdev.org/downloads/category/56-2023-01-23
  2. Extract the archive
  3. Copy the DAT files to ~/.hasheous-server/Data/Signatures/TOSEC/

MAME Arcade

  1. Download the DAT files from the source website. For example; from https://www.progettosnaps.net/dats/MAME
  2. Extract the archive
  3. Copy the file name MAME 0.257 (arcade).dat files to ~/.hasheous-server/Data/Signatures/MAME Arcade/

MAME MESS

  1. Download the DAT files from the source website. For example; from https://www.progettosnaps.net/dats/MAME
  2. Extract the archive
  3. Copy the file name MAME 0.257 (mess).dat files to ~/.hasheous-server/Data/Signatures/MAME MESS/

Redump

  1. Download the DAT files from the source website. For example; from https://redump.info/downloads/
  2. Copy the DAT files to ~/.hasheous-server/Data/Signatures/Redump/

No-Intro

  1. Download the DAT files from the source website. For example; from https://datomatic.no-intro.org/index.php?page=download&op=daily&s=64
  2. Set Type to Standard DAT and click Request
  3. Extract the archive and copy the *.dat files from the ./No-Intro directory to ~/.hasheous-server/Data/Signatures/NoIntro/DAT
  4. Download the DB files from the source website.
  5. Set Type to DB and click Request
  6. Extract the archive and copy the *.xml files from the ./No-Intro directory to ~/.hasheous-server/Data/Signatures/NoIntro/DB

About

Public server to proxy and cache IGDB queries and provide hash matching and lookups for the Gaseous server and other projects.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

54 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages