Repository map
Language, SDK, transport, directories, API paths, deployment, tests, and history.
discovery/templates/00-repo-map.mdView source on GitHub Repository identity confirmed: this repository IS the MCP server. The executable server, tool implementations, OptiCat HTTP client, protocol entry points, and AWS deployment definitions are all present here; it is not merely a client or host-agent shell. Same-day escalation: N/A — the server does not live elsewhere.
Audit date: 2026-08-07. Repository path: /Users/np/Documents/GitHub/opticat-mcp. The requested template did not exist in the checkout when this pass began, so this file reconstructs the requested structure at the specified path. It contains no unresolved placeholders. The repository itself names the package and infrastructure opticat-mcp; the string opticatmcppoc does not occur in the checked-in source.
1. Language, framework, and MCP SDK
| Item | Current state |
|---|---|
| Language | Python. AWS deployment paths use Python 3.12. The root package does not declare requires-python. |
| Packaging | setuptools.build_meta; packages are discovered below src/. Root project name/version: opticat-mcp 0.1.0. |
| Primary MCP framework | The official MCP Python SDK's v1-era FastMCP, imported as from mcp.server.fastmcp import FastMCP in src/opticat_mcp/server.py:14. |
| Server construction | FastMCP("opticat", host="0.0.0.0", stateless_http=True) in src/opticat_mcp/server.py:51. |
| Tool style | Async Python functions registered with bare @mcp.tool() decorators. |
| HTTP client | httpx.AsyncClient, created per upstream request. |
| AWS libraries | boto3 for SSM Parameter Store and Secrets Manager; Python AWS CDK for infrastructure; Bedrock AgentCore metadata/wrapper for one hosting option. |
| Official TypeScript MCP SDK | N/A — no JavaScript/TypeScript application or @modelcontextprotocol/sdk dependency exists. |
Third-party fastmcp package |
N/A — the import comes from the official mcp Python package, not the separate fastmcp distribution. |
| Azure AI Foundry tool bindings | N/A — no Foundry SDK, binding, or deployment artifact exists. |
| Semantic Kernel | N/A — no Semantic Kernel package or code exists. |
| Primary protocol implementation | SDK-driven FastMCP. |
| Lambda protocol implementation | Hand-rolled subset: deployment/lambda/lambda_handler.py manually parses JSON-RPC and handles only initialize, tools/list, and tools/call. It imports the same tool functions but does not run FastMCP's protocol dispatcher. |
Dependency declarations and SDK currency
| File | MCP declaration | Meaning |
|---|---|---|
pyproject.toml |
mcp |
Completely unpinned. |
requirements.txt |
mcp |
Completely unpinned; this is what the CDK bundle installs. |
deployment/lambda/requirements.txt |
mcp>=1.3.2 |
Lower bound only; no <2 compatibility ceiling. |
deployment/agentcore/requirements-agentcore.txt |
mcp>=1.10.0 |
Lower bound only; no <2 compatibility ceiling. |
There is no lockfile, so the exact MCP version used by any historical deployment cannot be recovered from this repository. The source is written against MCP SDK v1: it imports mcp.server.fastmcp.FastMCP and passes v1-style transport settings to the constructor. As of this audit, PyPI identifies MCP Python SDK 2.0.0 as the current stable release, and its current examples use MCPServer; PyPI explicitly tells v1 consumers to use a <2 upper bound until migration. This repository has no such bound. Therefore:
- exact resolved repository SDK version: N/A — unpinned and no lockfile;
- source API generation: v1-era FastMCP;
- current SDK stable line: 2.0.0;
- currentness: not current;
- reproducibility: not reproducible from manifests alone;
- fresh-install compatibility: the declarations now permit/install v2 even though the source uses v1 API paths.
Other packaging drift:
- Root
pyproject.tomlomitsboto3, although server credential fallbacks import it. Rootrequirements.txtdoes include it. - There is no
[project.scripts]entry. README commands usinguvx opticat-mcp-serveror installingopticat-mcp-serverare not implemented by this package metadata. - README says MIT, but no
LICENSEfile exists.
2. Transport and server entry points
Canonical FastMCP runtime
| Item | Value |
|---|---|
| Source file | src/opticat_mcp/server.py |
| Server object | Module-level mcp |
| Entry function | main() at src/opticat_mcp/server.py:946-949 |
| Module entry | if __name__ == "__main__": main() at lines 951-952 |
| Selected transport | Streamable HTTP: mcp.run(transport="streamable-http") |
| Host/stateless mode | host="0.0.0.0", stateless_http=True |
Transport findings:
- Streamable HTTP: implemented and always selected by
main(). - Stdio: N/A — mentioned by the module docstring and local Kiro setup docs, but no executable branch selects stdio.
- SSE: N/A — no SSE server invocation exists.
- Foundry-native: N/A — no Azure AI Foundry runtime or binding exists.
- WebSocket: N/A — no implementation exists.
deployment/agentcore/agentcore_wrapper.py sets MCP_TRANSPORT=http, but src/opticat_mcp/server.py never reads MCP_TRANSPORT; it still reaches the hard-coded Streamable HTTP call. The README/SETUP Kiro configurations launch the module as a subprocess, which implies stdio, but the process actually starts an HTTP server.
Lambda/API Gateway runtime
| Item | Value |
|---|---|
| File | deployment/lambda/lambda_handler.py |
| Entry function | handler(event, context) at line 245 |
| Transport shape | API Gateway HTTP event to JSON HTTP response |
| Protocol | Hand-written JSON-RPC-shaped MCP subset |
| Reported MCP protocol version | 2024-11-05 |
| Supported methods | initialize, tools/list, tools/call |
| Ingress authentication | API Gateway x-api-key where deployed by CDK/manual gateway |
Bedrock AgentCore runtime
| Item | Value |
|---|---|
| Wrapper | deployment/agentcore/agentcore_wrapper.py |
| Config | deployment/agentcore/.bedrock_agentcore.yaml |
| Entrypoint | Wrapper imports opticat_mcp.server.main |
| Runtime | Python 3.12, Linux ARM64 |
| AgentCore protocol | MCP |
| Network | PUBLIC |
| Effective MCP transport | The same FastMCP Streamable HTTP entry |
AgentCore is hosting/runtime metadata around the Python MCP server; it is not the tool implementation framework.
3. Directory map
The table covers every repository/application directory. Internal .git/objects, refs, and other Git implementation subdirectories are intentionally summarized under .git/ because they are not project source.
| Directory | Purpose |
|---|---|
/Users/np/Documents/GitHub/opticat-mcp/ |
Repository root: package manifests, README/setup documentation, system prompt, and macOS metadata. |
/Users/np/Documents/GitHub/opticat-mcp/.git/ |
Local Git object database, refs, configuration, and checkout metadata. |
/Users/np/Documents/GitHub/opticat-mcp/src/ |
Setuptools source-layout root. |
/Users/np/Documents/GitHub/opticat-mcp/src/opticat_mcp/ |
Executable package. server.py contains the server, API client helpers, all 16 FastMCP tools, and main(); __init__.py is empty. |
/Users/np/Documents/GitHub/opticat-mcp/data/ |
Non-runtime POC/reference material: OptiCat manual, Postman collection, use-case CSV/XLSX planning, research cases, and commercial proposal. Runtime code does not load this directory; CDK excludes it. |
/Users/np/Documents/GitHub/opticat-mcp/deployment/ |
Deployment guide and two AWS-specific deployment variants. |
/Users/np/Documents/GitHub/opticat-mcp/deployment/lambda/ |
Hand-rolled Lambda MCP adapter, manual ZIP deploy script, Lambda requirements, a separate seven-tool AgentCore Gateway schema, and Copilot Studio connection instructions. |
/Users/np/Documents/GitHub/opticat-mcp/deployment/agentcore/ |
Bedrock AgentCore direct-runtime wrapper/config, secret setup, deployment notes, requirements, and a manual local smoke-test script. |
/Users/np/Documents/GitHub/opticat-mcp/infrastructure/ |
Python AWS CDK app and stack for Lambda, API Gateway REST API, API key/usage plan, SSM access, and CloudWatch log retention. |
/Users/np/Documents/GitHub/opticat-mcp/build_pipeline/ |
Azure DevOps build/deploy pipeline. |
/Users/np/Documents/GitHub/opticat-mcp/build_pipeline/vars/ |
Environment mapping, AWS region, Azure variable groups, and AWS service-connection names for feature/develop/prod. |
/Users/np/Documents/GitHub/opticat-mcp/discovery/ |
Untracked discovery, diagnosis, baseline, evaluation, and assessment artifacts. These are audit outputs, not runtime inputs. |
/Users/np/Documents/GitHub/opticat-mcp/discovery/templates/ |
Requested location for this completed repository-map artifact. It did not exist before this pass. |
Agent instructions, system prompts, and prompt-like files
-
/Users/np/Documents/GitHub/opticat-mcp/AGENT_PROMPT.md- Explicitly titled “OptiCat Automotive Parts Assistant - System Prompt.”
- Directs vehicle/tool selection, retailer-brand workflows, chaining, clarification, response formatting, and prohibited behavior.
- Not loaded by server code; a host must install/use it separately.
-
/Users/np/Documents/GitHub/opticat-mcp/src/opticat_mcp/server.py- Tool docstrings include extensive model-facing workflows and usage rules. FastMCP uses those docstrings as tool descriptions, so this prompt-like content is active through
tools/list.
- Tool docstrings include extensive model-facing workflows and usage rules. FastMCP uses those docstrings as tool descriptions, so this prompt-like content is active through
-
/Users/np/Documents/GitHub/opticat-mcp/deployment/lambda/lambda_handler.py- Contains an independently maintained set of model-facing tool descriptions and JSON schemas.
-
/Users/np/Documents/GitHub/opticat-mcp/deployment/lambda/tool_schema.json- Static seven-tool binding schema for an AWS Lambda/AgentCore Gateway target.
-
/Users/np/Documents/GitHub/opticat-mcp/deployment/lambda/COPILOT_STUDIO_SETUP.md- Host integration instructions for Copilot Studio and AgentCore Gateway, including committed credential material.
-
/Users/np/Documents/GitHub/opticat-mcp/data/OptiCat_MCP_Proposal_Tenexity.docx- Planning material describing an intended LLM “instruction set,” terminology translation, inference, and clarification logic. It is not loaded at runtime.
Repository-level AGENTS.md, CLAUDE.md, or equivalent coding-agent instruction file: N/A — none exists in this repository.
MCP prompt registrations/resources: N/A — no @mcp.prompt(), @mcp.resource(), prompts/list, or resources are implemented.
4. Tool registration
Canonical FastMCP registration
- File:
src/opticat_mcp/server.py - Server creation: module-level
mcp = FastMCP(...) - Pattern: bare decorators on async functions:
@mcp.tool()
async def tool_name(...) -> str:
...
- Naming: no decorator overrides; the exact model-visible name is the Python function name.
- Description generation: FastMCP derives the tool description from the function docstring.
- Input generation: FastMCP derives JSON Schema from the signature/type annotations.
- Return type: every tool returns a preformatted string.
- Annotations: none; no
readOnlyHintor related MCP annotations are declared.
Registered tools, in source order:
search_parts_by_vehicleget_vehicle_yearsget_vehicle_makesget_vehicle_modelsget_part_detailsget_part_applicationssearch_partsget_brand_codesdiscover_part_typesget_vehicles_by_vinget_vehicle_assetsget_part_cross_referencesget_part_supersessioncheck_part_fitment_for_vehicleget_part_attributesget_part_descriptions
No dynamic registry, class-based tool provider, plugin discovery, service container, code generation, or separate controller layer exists.
Lambda registration
deployment/lambda/lambda_handler.py duplicates the surface manually:
TOOLSmaps the same 16 strings to imported functions.TOOL_SCHEMASindependently describes the same 16 tools.handler()returnsTOOL_SCHEMAS.values()fortools/listand dispatches calls throughTOOLS.
This schema is shorter than the FastMCP docstrings and can drift independently.
Static AgentCore Gateway registration
deployment/lambda/tool_schema.json exposes only seven older tools:
search_parts_by_vehicleget_vehicle_yearsget_vehicle_makesget_vehicle_modelsget_part_detailsget_part_applicationssearch_parts
It omits the other nine canonical tools, including VIN decode, cross-reference, supersession, and fitment verification.
5. API client layer and referenced endpoints
Executable client implementation
There is no separate client module. src/opticat_mcp/server.py colocates:
BASE_URLat line 19;get_api_key()at lines 22-49;call_opticat_api()at lines 53-68;- paginated facet helper
find_in_facets()at lines 71-93; - every tool.
call_opticat_api() behavior:
- creates a new
httpx.AsyncClient(timeout=30.0)per call; - sends an HTTPS
POST; - serializes a JSON request body;
- sends headers
X-Api-KeyandContent-Type: application/json; - calls
raise_for_status(); - parses JSON;
- logs elapsed time.
No connection pool shared across calls, retry/backoff, circuit breaker, cache, response model, database, request persistence, or write-side OptiCat operation exists.
Upstream authentication
Credential resolution order in get_api_key():
OPTICAT_API_KEYenvironment variable.- SSM Parameter Store name in
OPTICAT_API_KEY_SSM_PARAM, decrypted inAWS_REGIONor defaulteu-central-1. - Secrets Manager secret ID
opticat-api-key, JSON fieldOPTICAT_API_KEY, inAWS_REGIONor defaulteu-central-1.
Runtime upstream authentication is exclusively the X-Api-Key header. Reference documentation also describes Basic Auth with API key as username and an api_key query parameter, but executable Python does not use those alternatives.
URL and WSDL references
| URL/reference | Where | Executed? |
|---|---|---|
https://webservice.opticatonline.com/autocare/v1/services/Catalog.jsonEndpoint |
src/opticat_mcp/server.py, Postman collection, manual |
Yes — the only OptiCat service URL called by code. |
https://webservice.opticatonline.com/autocare/v1/services/Catalog.jsonEndpoint?api_key=... |
Supplied manual | No — alternate-auth documentation only. |
https://webservice.opticatonline.com/autocare/v1/services/Catalog.soapEndpoint?doc |
Supplied manual and planning workbook | No — documentation reference only. |
https://webservice.opticatonline.com/autocare/v1/services/CatalogWrapped.soapEndpoint?wsdl |
Supplied manual | No — WSDL reference only; no WSDL file or SOAP client is checked in. |
https://webservice.opticatonline.com/autocare/v1/tester.html |
Supplied manual | No — human test page. |
http://webservice.tecalliance.services |
SOAP namespace in manual examples | No — namespace, not an executable target. |
http://webservice.opticatonline.com |
SOAP response namespace in manual examples | No — namespace, not an executable target. |
https://digital-assets.opticatonline.com/... |
Manual/example PIES and asset responses | No direct fetch — URLs may occur in upstream data, but server formatters do not fetch them. |
https://www.opticatonline.com/search..., /part/..., /vehicle_intel... |
Human catalog examples in manual | No. |
Upstream operation names
Executable Python uses:
| Operation | Tools |
|---|---|
getAutoCareVehicleResults |
Vehicle years/makes/models, vehicle-to-part resolution, fitment verification |
getAutoCareSearchResults |
General part search, vehicle part search, brand facets, part-type discovery |
getAutoCarePartDetails |
Part summary, cross-references, supersession, attributes, descriptions |
getAutoCarePartApplications |
Part-to-vehicle fitment and yes/no verification |
getAutoCareVehicleAssets |
Base-vehicle ACES assets |
getAutoCareVehiclesByVIN |
VIN decode |
Referenced only in supplied data/manual/Postman material:
| Operation | Status |
|---|---|
getAutoCareVersion |
Reference/test operation only. |
getAutoCareBrandsLastUpdatedDates |
Reference/Postman operation only. |
getSearchResults |
Manual describes it as combined OptiCat + TecDoc results; not implemented. |
The Postman collection contains 22 example POST requests across version, brand-update, vehicle, search, detail, application, and vehicle-asset operations. It uses collection-level Basic Auth. It does not define the implemented VIN operation.
6. Deployment and shipped artifacts
Requested deployment technologies
| Technology | Status |
|---|---|
| Bicep | N/A — no Bicep files exist. |
| ARM template | N/A — no ARM JSON/templates exist. |
| Terraform | N/A — no .tf files or Terraform configuration exist. |
| Dockerfile | N/A — no Dockerfile or container build definition exists. |
| Docker Compose | N/A — no Compose file exists. |
| GitHub Actions | N/A — no .github/workflows directory exists. |
| Kubernetes/Helm | N/A — no manifests or charts exist. |
| AWS CDK | Present — Python CDK under infrastructure/. |
| Azure DevOps pipeline | Present — build_pipeline/deploy-pipeline.yaml. |
| Bedrock AgentCore direct deployment | Present as manually operated config/docs. |
Automated shipping path: Azure DevOps → AWS CDK
build_pipeline/deploy-pipeline.yaml:
- triggers on
mainanddevelop; - validates pull requests targeting those branches;
- maps
main→prod,develop→develop, other source branches →feature; - uses Python 3.12, Node 22, and AWS CDK CLI 2.178.0;
- runs
cdk synthin its Test stage; - does not run application tests;
- on non-PR success, writes the OptiCat key to SSM SecureString and deploys CDK.
Environment/service-connection mapping:
- region:
eu-central-1; - prod: Azure service connection
DS&ML Prod, variable groupopticat_mcp_prod; - develop:
DS&ML Dev, variable groupopticat_mcp_develop; - feature:
DS&ML Test, variable groupopticat_mcp_feature.
The CDK stack creates:
- Lambda
opticat-mcp-<env>; - runtime Python 3.12;
- handler
lambda_handler.handler; - 512 MB memory;
- 29-second timeout;
- environment
OPTICAT_API_KEY_SSM_PARAM=/opticat-mcp/<env>/OPTICAT_API_KEY; - permission to read that SSM SecureString;
- two-week CloudWatch log retention;
- API Gateway REST API
opticat-mcp-<env>; - API Gateway API key and usage plan;
- rate 50 requests/second and burst 100;
- API-key-required root POST and proxy methods.
What the CDK bundle actually ships:
- dependencies installed from root
requirements.txt; src/opticat_mcp/;deployment/lambda/lambda_handler.py.
It excludes data, deployment source, infrastructure source, Markdown, local environments, Git metadata, .env, and several local directories. Therefore the automated Lambda deployment runs the hand-written Lambda MCP adapter, not FastMCP's Streamable HTTP application.
Manual legacy Lambda deployment
deployment/lambda/deploy.sh:
- builds a ZIP from
deployment/lambda/requirements.txt; - copies
src/opticat_mcpandlambda_handler.py; - reads
OPTICAT_API_KEYfrom Secrets Manageropticat-api-key; - updates an already-existing Lambda named
OptiCatMcpProxy; - sets the key directly in the Lambda environment;
- prints a hard-coded API Gateway
/prod/mcpURL and API key.
It does not create the Lambda, API Gateway, or gateway key. Its names and secret model differ from the CDK path.
Bedrock AgentCore direct runtime
deployment/agentcore/.bedrock_agentcore.yaml describes direct code deployment:
- entrypoint
deployment/agentcore/agentcore_wrapper.py(stored as an absolute path from the original developer machine); - Python 3.12, Linux ARM64;
- public network;
- MCP protocol;
- observability enabled;
- AWS JWT enabled;
- short-term AgentCore memory;
- region
eu-central-1.
The wrapper loads OPTICAT_API_KEY from Secrets Manager if absent and starts the canonical FastMCP main(). No CI job deploys this configuration; docs prescribe manual agentcore deploy. The runtime ARN in the YAML differs from the ARN in deployment/agentcore/DEPLOYMENT.md.
AgentCore Gateway/Copilot Studio legacy surface
deployment/lambda/tool_schema.json points at a differently named Lambda, OptiCatMcpServer, and exposes a static seven-tool schema. deployment/lambda/COPILOT_STUDIO_SETUP.md documents an AgentCore Gateway and OAuth 2.0 client-credentials connection for Copilot Studio.
Represented AWS identities are not reconciled:
- CDK Lambda:
opticat-mcp-<env>; - manual Lambda:
OptiCatMcpProxy; - gateway-target Lambda:
OptiCatMcpServer; - direct AgentCore runtime:
agentcore_server.
Environment variables and secrets
| Name/source | Consumer | Purpose |
|---|---|---|
OPTICAT_API_KEY |
Server, Lambda, AgentCore wrapper, manual test | Upstream OptiCat credential. |
OPTICAT_API_KEY_SSM_PARAM |
Server in CDK Lambda | SSM SecureString parameter name. |
AWS_REGION |
Server and AgentCore wrapper | SSM/Secrets Manager region; defaults to eu-central-1. |
CDK_DEFAULT_ACCOUNT |
CDK app | Target AWS account. |
CDK_DEFAULT_REGION |
CDK app | Target AWS region; defaults to eu-central-1. |
MCP_TRANSPORT |
AgentCore wrapper | Set to http, but ignored by server code. |
Azure variable OPTICAT_API_KEY |
Pipeline | Written to SSM SecureString. |
| Azure variable groups/AWS service connections | Pipeline | Deployment credentials/configuration. |
Root .env |
setup_secret.sh |
Expected local source for OPTICAT_API_KEY; file is not checked in. |
Committed credential material exists in:
/Users/np/Documents/GitHub/opticat-mcp/deployment/README.md— API Gateway key value;/Users/np/Documents/GitHub/opticat-mcp/deployment/lambda/deploy.sh— prints the same key;/Users/np/Documents/GitHub/opticat-mcp/deployment/lambda/COPILOT_STUDIO_SETUP.md— OAuth client ID and client secret.
Values are intentionally not reproduced here.
7. Tests
Automated application test suite: N/A — no tests/ directory, pytest/unittest configuration, test dependency, fixtures, mocks, coverage configuration, contract tests, or transport tests exist.
The only test-like file is:
/Users/np/Documents/GitHub/opticat-mcp/deployment/agentcore/test_agentcore_local.py
Intended manual smoke coverage:
- get vehicle years;
- get makes for 2007;
- search brake pads for a 2007 Ford Mustang.
Current executability: broken. It imports agentcore_server and agentcore_server.server, but no agentcore_server.py module or package exists. Current code lives in opticat_mcp.server, and the AgentCore entry is agentcore_wrapper.py.
Pipeline validation:
- Azure stage named
Testperforms onlycdk synth. - It can validate infrastructure synthesis.
- It does not import the application, list tools, invoke the Lambda handler, test FastMCP transport, verify schemas against functions, or call OptiCat.
No live OptiCat, AWS, or AgentCore calls were made in this discovery pass.
8. Git history
| Metric | Result |
|---|---|
| Commit count | 1 |
| Contributor count by Git author identity | 1 |
| Contributor | tenexity <nick@tenexity.ai> |
| First commit | 58c67859a06f186a98fd5e6b12ad6d15898a78a6 at 2026-08-07T09:31:40-05:00 |
| Last commit | Same commit |
| Date range | 2026-08-07 to 2026-08-07; a single timestamp |
| Local branch | main |
| Tags | N/A — no tags exist. |
| Remote | https://github.com/tenexity/opticat-mcp.git |
| Tracking state | main...origin/main [gone]; the configured remote-tracking ref is absent locally. |
Last 20 commit messages
Only one commit exists, so the requested last 20 contain one row:
| Hash | Date | Author | Message — verbatim |
|---|---|---|---|
58c6785 |
2026-08-07 | tenexity | initial update |
What commit messages reveal about known problems: N/A — the sole message is a bulk “initial update” and admits no limitation, timeout, cap, disabled feature, defect, fix, revert, or issue reference.
Commit messages admitting limitations, quoted with hash: N/A — no such commit message exists.
Current-tree limitations cannot be attributed to history because the repository was imported in one commit. Source inspection, not commit narrative, reveals:
- v1 FastMCP source with unbounded requirements that now resolve v2;
- executable HTTP transport versus stdio-oriented local setup docs;
- 16 canonical tools versus a seven-tool static gateway schema;
- multiple unreconciled AWS runtime identities;
- broken manual test imports;
- API result caps and field whitelists inside tool formatters;
- VIN functionality that may be subscription-disabled upstream;
MCP_TRANSPORTset but ignored;- prompt/schema drift across FastMCP, Lambda, static gateway, and
AGENT_PROMPT.md; - committed ingress/OAuth credential material.
9. Repository identity and architecture
This is the MCP server repository because it contains all necessary server-side layers:
- MCP server object and entrypoint;
- tool registration and implementation;
- upstream API credential resolution;
- OptiCat request/response logic;
- HTTP/Lambda protocol adapters;
- infrastructure and deployment definitions.
It also contains host instructions and Copilot/Kiro connection docs, but those are ancillary. No external repository is referenced as the location of the actual server implementation.
flowchart LR
U["User"]
H["Host agent<br/>Kiro, Copilot Studio, or another MCP host"]
subgraph S["MCP server components in this repository"]
F["FastMCP server<br/>16 decorator-registered tools<br/>Streamable HTTP"]
G["API Gateway REST API<br/>x-api-key ingress"]
L["Lambda adapter<br/>hand-written JSON-RPC subset<br/>16-tool in-code schema"]
AG["Bedrock AgentCore runtime or Gateway<br/>direct MCP runtime or legacy 7-tool binding"]
T["Shared async tool functions<br/>text formatters"]
C["httpx OptiCat client<br/>credential resolver"]
end
subgraph O["OptiCat / TecAlliance references"]
J["Catalog.jsonEndpoint<br/>executed HTTPS POST target"]
OPS["Executed operations<br/>VehicleResults, SearchResults,<br/>PartDetails, PartApplications,<br/>VehicleAssets, VehiclesByVIN"]
SOAP["Catalog SOAP docs and wrapped WSDL<br/>reference only, not executed"]
ASSET["digital-assets.opticatonline.com<br/>returned URL family, not fetched"]
TD["TecAlliance SOAP namespace / getSearchResults<br/>reference only, not implemented"]
end
U --> H
H -- "Streamable HTTP" --> F
H -- "JSON-RPC over HTTPS" --> G
H -- "OAuth/JWT-managed HTTPS" --> AG
G --> L
AG --> F
AG -. "legacy Gateway target" .-> L
F --> T
L --> T
T --> C
C -- "X-Api-Key + JSON POST" --> J
J --> OPS
OPS --> C
J -. "response may contain URLs" .-> ASSET
SOAP -. "documentation only" .-> J
TD -. "documentation only" .-> J
C --> T
T --> H
H --> U
Executive summary
In plain language, this codebase is the actual Python proof-of-concept MCP server for asking OptiCat automotive-catalog questions: it exposes 16 read-only lookup tools, translates those calls into JSON requests to one OptiCat OnLine endpoint, and formats the results as text for an AI host. Its main implementation is a v1-era FastMCP Streamable HTTP server, while its automated AWS path packages the same tool functions behind a simpler hand-written Lambda adapter and API Gateway; additional AgentCore and Copilot artifacts represent older or parallel deployment approaches. The repository is small and self-contained, but its dependency version is not locked, its docs and deployment surfaces have drifted, its only smoke test is broken, and its one-commit history provides no explanation for those limitations.