property-inventory
Generates a scope-limited inventory catalogue in an Obsidian vault, allowing agents to browse the physical property ledger as Markdown notes while canonical data remains outside Obsidian.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@property-inventorysearch my inventory for a working hex bit"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
agent-property-inventory
agent-property-inventory is a local evidence ledger for physical possessions, exposed through a CLI and an MCP server for AI agents.
It records individual objects, where they are, their condition, the interfaces they use, and the evidence behind each claim. It is built for questions such as "Do I already own a T25 bit?", "Will this adapter fit?", and "What should go in this moving box?"
I built it because I wanted a durable way to record and query what I physically own, and to stop buying duplicates.
See it answer a real question
This exact block is reproduced from a temporary inventory by check-readme-example.py, which the CI workflow runs against the real CLI.
$ property-inventory search "T25" --summary
{
"matching_record_found": true,
"count": 1,
"matches": [
{
"name": "T25 Torx bit",
"ownership": "confirmed",
"condition": "working",
"location": "Tool drawer",
"last_physical_check_on": "2026-08-09",
"evidence_types": [
"physical_check"
]
}
],
"next_cursor": null,
"page_count": 1,
"truncated": false
}The item is a distinct physical unit, current possession was confirmed in person, its condition is working, and its last known location is the tool drawer. A search with no match returns unknown, not absent; it never turns a missing record into a claim that you do not own something.
Related MCP server: local-evidence-mcp
What you can ask
Command | Question |
| Do I already own this, and where is it? |
| What recorded items are relevant to this repair or task? |
| Do these two exact items have matching interfaces? |
| Is this tool setup complete and within its recorded limits? |
| Will measured items fit in this checked container? |
| Which owned items have enough evidence, and what is missing? |
The same queries are available to agents through the local stdio MCP server.
How it works
Capture a fact. A person shows an object or checks a label, serial number, measurement, receipt, condition, or location. Every claim keeps its evidence.
Match before adding. The agent searches the existing inventory first. A known unit is updated; a genuinely different physical unit gets a new record.
Commit through the CLI. Canonical writes take one lock, create a backup, stage the complete change, rebuild the views, and run semantic and foreign-key checks. The live JSONL changes only after every check passes.
Query through the CLI or MCP. Reads use the same schema and scope rules. Read-profile MCP tools query the inventory. Write-profile tools prepare a proposal for review; the separate CLI command
proposal-applycommits it.
The canonical write path is:
lock -> backup -> stage -> rebuild -> render -> verify -> replaceData/store/*.jsonl is the source of truth. SQLite and the Markdown catalogue are generated views and can be rebuilt.
What it refuses to guess
Input | Safe result |
An item is in a shopping cart |
|
A receipt says an item was bought | Purchase evidence, not proof of current possession |
Two tools serve a similar purpose | Compatibility stays unknown until their interfaces match |
A search returns no record | Unknown, not absent |
An expected item is missing from one room | Follow-up required, not sold, lost, or disposed |
Unknown serial numbers, locations, measurements, quantities, and compatibility facts stay unknown.
Where the files live
An installation keeps four paths separate:
Path | Contents |
Inventory root | Canonical JSONL and ownership metadata |
Media root | Content-addressed photos, receipts, and other evidence |
Runtime directory | SQLite, locks, backups, journals, and pending proposals |
Catalogue output | A generated, scope-filtered Markdown view |
The code can live anywhere. The private JSONL does not need to sit in an Obsidian vault.
Quick start
Python 3.11 or newer is required.
git clone https://github.com/Anneo22/agent-property-inventory.git
cd agent-property-inventory
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev,mcp]'
demo_root="$(mktemp -d "${TMPDIR:-/tmp}/property-inventory-demo.XXXXXX")"
export PROPERTY_INVENTORY_ROOT="$demo_root/inventory"
export PROPERTY_INVENTORY_RUNTIME="$demo_root/runtime"
export PROPERTY_INVENTORY_MEDIA_ROOT="$demo_root/media"
export PROPERTY_INVENTORY_CATALOGUE_OUTPUT="$demo_root/notes/Inventory.md"
property-inventory init
property-inventory status --summarystatus rebuilds every generated view and runs the full integrity gate. Run property-inventory --help for the complete command surface.
Record the first item
For a direct check, the CLI caller supplies what was physically observed. A person or an agent acting on explicit observations runs discover to record the physical check, current possession, condition, quantity, and location in one verified transaction:
property-inventory add-location \
--location-id loc-tool-drawer \
--name "Tool drawer" \
--kind container
property-inventory discover \
--actor "Owner" \
--source-ref "Checked in person" \
--name "T25 Torx bit" \
--category tool \
--checked-on "$(date +%F)" \
--location-id loc-tool-drawer \
--new-model \
--new-unit \
--brand Wera \
--model T25 \
--quantity 1 \
--unit piece \
--condition working
property-inventory search "T25" --summaryFor an item that may already exist, search first and use --existing-model-id or --existing-item-id. --new-unit is an explicit assertion that this is a different physical object.
Connect an agent
The MCP server runs locally over stdio. This example gives an agent read-only access to personal-scope data:
{
"command": "/absolute/path/to/property-inventory-mcp",
"args": [
"--config", "/absolute/path/to/config.json",
"--instance", "private",
"--scope", "personal",
"--profile", "read"
]
}Write-profile MCP tools can create a proposal in private scope, but they cannot change canonical JSONL. The CLI caller decides what becomes fact: inspect the returned ID with property-inventory proposal-show <proposal-id>, check the proposed identity, quantity, condition, location, and evidence, then commit it with property-inventory proposal-apply <proposal-id>.
A photo follows the same boundary:
photo -> prepare_overview_capture -> confirm or correct observations
-> review_overview_capture -> proposal-show -> proposal-applyThe agent passes a local image path and explicit crop regions to prepare_overview_capture. An optional adapter, selected from configuration fixed when the MCP server starts, can suggest regions and observations. Without an adapter, the caller supplies regions and manual observations. The tool stages the original and crops, then returns a digest plus any bounded suggestions and duplicate candidates. The caller confirms or corrects identity, quantity, condition, and location; review_overview_capture binds those decisions and the evidence to that exact image. Only the final CLI command changes the canonical inventory.
The CLI is the write-authority boundary: any person or agent given local CLI and filesystem access can invoke a direct write or proposal-apply. Direct commands such as discover have no separate proposal review, but still pass the full integrity gate before commit. An agent given only MCP access cannot bypass the proposal gate. See MCP profiles and overview capture.
Current limits
This is a local, single-user project. It has no graphical app, hosted service, built-in recognition model, or insurer integration. Photo and barcode adapters can propose observations, but nothing becomes an inventory fact until it is reviewed and committed through the CLI.
Documentation
Architecture · Schema · Operations · MCP · Capture · Threat model
License
MIT. See LICENSE.
This server cannot be installed
Maintenance
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
- Alicense-qualityBmaintenanceProvides LLM agents with a structured, queryable, local-first knowledge base with typed documents and full-text search via MCP.MIT
- Alicense-qualityCmaintenanceA local-first MCP server for retrieving a small evidence set and recording reviewed conclusions, policy-gated and redacted without giving an agent general filesystem access.MIT
- Flicense-qualityCmaintenanceRead-only MCP server for querying an evidence-aware knowledge vault with temporal and provenance-aware data, supporting agent memory and semantic graph projections.
- Alicense-qualityCmaintenanceAn MCP server providing an append-only, hash-chained evidence ledger for agent actions, where every record is a tamper-evident receipt cryptographically bound to all prior records and persisted as human-readable JSONL local state. It exposes tools to append records, verify chain integrity (pinpointing tampering), query records by actor/action/target/time, and fetch ledger stats—with no update or delete capabilities by design.Apache 2.0
Related MCP Connectors
Read-only Remote MCP for externally grounded AI agent trust receipts.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Agent-native marketplace. Bootstrap, list inventory, search, negotiate, and trade via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Anneo22/agent-property-inventory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server