document_symbols_cache_v23-06-25.pkl•489 kB
�� }�(�src/Server.php-False�� ebb5be6d481c8e630771874e6dfcd3e1�]�(}�(�name��$apiUrl��kind�K
�range�}�(�start�}�(�line�K� character�Ku�end�}�(hKh
Kuu�selectionRange�}�(h
}�(hKh
Kuh}�(hKh
Kuu�location�}�(�uri��@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php��range�h �absolutePath��9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php��relativePath��src/Server.php�u�children�]��parent�Nu}�(h� $hasToken�hK
h}�(h
}�(hKh
Kuh}�(hKh
K
uuh}�(h
}�(hKh
Kuh}�(hKh
K
uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh"h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$hasClientId�hK
h}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh.h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$isOfflineMode�hK
h}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh:h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$openfga�hK
h}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhFh�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$authentication�hK
h}�(h
}�(hK%h
Kuh}�(hK%h
Kuuh}�(h
}�(hK%h
Kuh}�(hK%h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhRh�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$authentication�hK
h}�(h
}�(hK(h
Kuh}�(hK(h
Kuuh}�(h
}�(hK(h
Kuh}�(hK(h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh^h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$authentication�hK
h}�(h
}�(hK.h
Kuh}�(hK.h
Kuuh}�(h
}�(hK.h
Kuh}�(hK.h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhjh�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $finalUrl�hK
h}�(h
}�(hK7h
Kuh}�(hK7h
Kuuh}�(h
}�(hK7h
Kuh}�(hK7h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhvh�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$openfga�hK
h}�(h
}�(hK9h
Kuh}�(hK9h
Kuuh}�(h
}�(hK9h
Kuh}�(hK9h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�Closure�hKh}�(h
}�(hK@h
K7uh}�(hKBh
K
uuh}�(h
}�(hK@h
K7uh}�(hKBh
K
uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�Closure�hKh}�(h
}�(hKBh
Kuh}�(hKDh
K
uuh}�(h
}�(hKBh
Kuh}�(hKDh
K
uu�children�]�}�(h�$error�hK
h}�(h
}�(hKBh
K)uh}�(hKBh
K5uuh}�(h
}�(hKBh
K/uh}�(hKBh
K5uuhh�h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�uah}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuhNuh�}�(h�$connectionError�hK
h}�(h
}�(hKEh
Kuh}�(hKEh
K+uuh}�(h
}�(hKEh
Kuh}�(hKEh
K+uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�
$container�hK
h}�(h
}�(hKPh
Kuh}�(hKPh
Kuuh}�(h
}�(hKPh
Kuh}�(hKPh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$server�hK
h}�(h
}�(hKSh
Kuh}�(hKSh
Kuuh}�(h
}�(hKSh
Kuh}�(hKSh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�
$startTime�hK
h}�(h
}�(hKbh
Kuh}�(hKbh
Kuuh}�(h
}�(hKbh
Kuh}�(hKbh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $docIndex�hK
h}�(h
}�(hKch
Kuh}�(hKch
Kuuh}�(h
}�(hKch
Kuh}�(hKch
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$endTime�hK
h}�(h
}�(hKeh
Kuh}�(hKeh
Kuuh}�(h
}�(hKeh
Kuh}�(hKeh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $loadTime�hK
h}�(h
}�(hKfh
Kuh}�(hKfh
Kuuh}�(h
}�(hKfh
Kuh}�(hKfh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hh�h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$sdks�hK
h}�(h
}�(hKih
Kuh}�(hKih
K
uuh}�(h
}�(hKih
Kuh}�(hKih
K
uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $sdkCount�hK
h}�(h
}�(hKjh
Kuh}�(hKjh
Kuuh}�(h
}�(hKjh
Kuh}�(hKjh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$sdk�hK
h}�(h
}�(hKoh
Kuh}�(hKoh
Kuuh}�(h
}�(hKoh
Kuh}�(hKoh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $overview�hK
h}�(h
}�(hKph
Kuh}�(hKph
Kuuh}�(h
}�(hKph
Kuh}�(hKph
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj+ h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$classCount�hK
h}�(h
}�(hKsh
Kuh}�(hKsh
Kuuh}�(h
}�(hKsh
Kuh}�(hKsh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj7 h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�
$sectionCount�hK
h}�(h
}�(hKth
Kuh}�(hKth
Kuuh}�(h
}�(hKth
Kuh}�(hKth
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hjC h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$chunkCount�hK
h}�(h
}�(hKuh
Kuh}�(hKuh
Kuuh}�(h
}�(hKuh
Kuh}�(hKuh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hjO h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$generalDoc�hK
h}�(h
}�(hK{h
K-uh}�(hK{h
K8uuh}�(h
}�(hK{h
K-uh}�(hK{h
K8uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj[ h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $overview�hK
h}�(h
}�(hK|h
Kuh}�(hK|h
Kuuh}�(h
}�(hK|h
Kuh}�(hK|h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hjg h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�
$sectionCount�hK
h}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h
}�(hKh
Kuh}�(hKh
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hjs h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�$chunkCount�hK
h}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h� $docError�hK
h}�(h
}�(hK�h
Kuh}�(hK�h
K uuh}�(h
}�(hK�h
Kuh}�(hK�h
K uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�
$transport�hK
h}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�Closure�hKh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh�]�}�(h�
$exception�hK
h}�(h
}�(hK�h
K+uh}�(hK�h
K?uuh}�(h
}�(hK�h
K5uh}�(hK�h
K?uuhj� h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�uah}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuhNuj� }�(h�Closure�hKh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh�]�(}�(h� $severity�hK
h}�(h
}�(hK�h
K'uh}�(hK�h
K0uuh}�(h
}�(hK�h
K'uh}�(hK�h
K0uuhj� h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�u}�(h�$message�hK
h}�(h
}�(hK�h
K2uh}�(hK�h
K:uuh}�(h
}�(hK�h
K2uh}�(hK�h
K:uuhj� h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�u}�(h�$file�hK
h}�(h
}�(hK�h
K<uh}�(hK�h
KAuuh}�(h
}�(hK�h
K<uh}�(hK�h
KAuuhj� h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�u}�(h�$line�hK
h}�(h
}�(hK�h
KCuh}�(hK�h
KHuuh}�(h
}�(hK�h
KCuh}�(hK�h
KHuuhj� h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�ueh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuhNuj� j� j� j� }�(h�Closure�hKh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh�]�}�(h�$error�hK
h}�(h
}�(hK�h
Kuh}�(hK�h
Kuuh}�(h
}�(hK�h
Kuh}�(hK�h
Kuuhj� h}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�uah}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj� h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuhNuj� }�(h�Closure�hKh}�(h
}�(hK�h
Kuh}�(hMh
K uuh}�(h
}�(hK�h
Kuh}�(hMh
K uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�Closure�hKh}�(h
}�(hMh
Kuh}�(hM h
K uuh}�(h
}�(hMh
Kuh}�(hM h
K uuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNu}�(h�
$throwable�hK
h}�(h
}�(hM
h
Kuh}�(hM
h
Kuuh}�(h
}�(hM
h
Kuh}�(hM
h
Kuuh}�(h�@file:///Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hj' h�9/Users/evan/Developer/evansims/openfga-mcp/src/Server.php�hhuh]�hNue]�(hh h,h8hDhPh\hhhth�h�h�h�h�h�h�h�h�h�j j j j) j5 jA jM jY je jq j} j� j� j� j� j� j
j j% e�����!src/Tools/AbstractTools.php-False�� 4d5fecbff19731d705c618b9f8b2be70�]�(}�(�name��OpenFGA\MCP\Tools��kind�K�range�}�(�start�}�(�line�K� character�K u�end�}�(j? Kj@ Kuu�selectionRange�}�(j= }�(j? Kj@ K
ujA }�(j? Kj@ Kuuh}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj< h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�h�src/Tools/AbstractTools.php�uh]�hNu}�(j8 �
AbstractTools�j: Kj; }�(j= }�(j? K j@ K ujA }�(j? KXj@ KuujC }�(j= }�(j? K j@ KujA }�(j? K j@ K%uu�children�]�(}�(j8 �checkOfflineMode�j: Kj; }�(j= }�(j? Kj@ KujA }�(j? Kj@ KuujC }�(j= }�(j? Kj@ KujA }�(j? Kj@ K'uujT ]�}�(j8 �
$operation�j: K
j; }�(j= }�(j? Kj@ K(ujA }�(j? Kj@ K9uujC }�(j= }�(j? Kj@ K/ujA }�(j? Kj@ K9uuhjV h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hja h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�uahjL h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjX h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uu}�(j8 �checkRestrictedMode�j: Kj; }�(j= }�(j? Kj@ KujA }�(j? K8j@ KuujC }�(j= }�(j? K!j@ KujA }�(j? K!j@ K*uujT ]�(}�(j8 �$storeId�j: K
j; }�(j= }�(j? K!j@ K+ujA }�(j? K!j@ KBuujC }�(j= }�(j? K!j@ K3ujA }�(j? K!j@ K;uuhjn h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjy h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�u}�(j8 �$modelId�j: K
j; }�(j= }�(j? K!j@ KDujA }�(j? K!j@ K[uujC }�(j= }�(j? K!j@ KLujA }�(j? K!j@ KTuuhjn h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�u}�(j8 �$restrictedStore�j: K
j; }�(j= }�(j? K(j@ KujA }�(j? K(j@ KuujC }�(j= }�(j? K(j@ KujA }�(j? K(j@ Kuuhjn h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�u}�(j8 �$restrictedModel�j: K
j; }�(j= }�(j? K0j@ KujA }�(j? K0j@ KuujC }�(j= }�(j? K0j@ KujA }�(j? K0j@ Kuuhjn h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�uehjL h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjp h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uu}�(j8 �checkRestrictedModeForWrites�j: Kj; }�(j= }�(j? K:j@ KujA }�(j? KGj@ KuujC }�(j= }�(j? K@j@ KujA }�(j? K@j@ K3uujT ]�}�(j8 �
$operation�j: K
j; }�(j= }�(j? K@j@ K4ujA }�(j? K@j@ KEuujC }�(j= }�(j? K@j@ K;ujA }�(j? K@j@ KEuuhj� h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�uahjL h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uu}�(j8 �checkWritePermission�j: Kj; }�(j= }�(j? KIj@ KujA }�(j? KWj@ KuujC }�(j= }�(j? KOj@ KujA }�(j? KOj@ K+uujT ]�}�(j8 �
$operation�j: K
j; }�(j= }�(j? KOj@ K,ujA }�(j? KOj@ K=uujC }�(j= }�(j? KOj@ K3ujA }�(j? KOj@ K=uuhj� h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uh]�uahjL h}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hj� h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uueh}�(h�Mfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjN h�F/Users/evan/Developer/evansims/openfga-mcp/src/Tools/AbstractTools.php�hjJ uhNujV j_ jn jw j� j� j� j� j� j� j� e]�(j7 jL e�����%src/Tools/DocumentationTools.php-True�� c176f7802346eaf296bf7181e6d1c4ef�]�(}�(�name��OpenFGA\MCP\Tools��kind�K�range�}�(�start�}�(�line�K� character�K u�end�}�(j� Kj� Kuu�selectionRange�}�(j� }�(j� Kj� K
uj� }�(j� Kj� Kuu�location�}�(�uri��Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php��range�j� �absolutePath��K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php��relativePath�� src/Tools/DocumentationTools.php�u�body��namespace OpenFGA\MCP\Tools;��children�]��parent�Nu}�(j� �DocumentationTools�j� Kj� }�(j� }�(j� Kj� K uj� }�(j� M�j� Kuuj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� K'uu�children�]�(}�(j� �$client��detail��
(promoted)�j� Kj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� K'uuj� }�(j� }�(j� Kj� K uj� }�(j� Kj� K'uuj j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� � private ClientInterface $client,�j� ]�u}�(j� �__construct�j� K j� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj ]�}�(j� �$client�j� K
j� }�(j� }�(j� Kj� Kuj� }�(j� Kj� K'uuj� }�(j� }�(j� Kj� K uj� }�(j� Kj� K'uuj j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j% j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� � private ClientInterface $client,�j� ]�uaj j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� ��public function __construct(
/** @phpstan-ignore property.onlyWritten */
private ClientInterface $client,
) {
}�u}�(j� �findSimilarDocumentation�j� Kj� }�(j� }�(j� Kj� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K(j� Kuj� }�(j� K(j� K,uuj ]�(}�(j� �$content�j� K
j� }�(j� }�(j� K)j� Kuj� }�(j� K)j� Kuuj� }�(j� }�(j� K)j� Kuj� }�(j� K)j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j? j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �string $content,�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� K*j� Kuj� }�(j� K*j� Kuuj� }�(j� }�(j� K*j� Kuj� }�(j� K*j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jL j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $sdk = null,�j� ]�u}�(j� �$similarity_threshold�j� K
j� }�(j� }�(j� K+j� Kuj� }�(j� K+j� K)uuj� }�(j� }�(j� K+j� Kuj� }�(j� K+j� K#uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jY j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"float $similarity_threshold = 0.5,�j� ]�u}�(j� �$limit�j� K
j� }�(j� }�(j� K,j� Kuj� }�(j� K,j� Kuuj� }�(j� }�(j� K,j� Kuj� }�(j� K,j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jf j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $limit = 5,�j� ]�u}�(j� �
$validSdks�j� K
j� }�(j� }�(j� K:j� Kuj� }�(j� K:j� Kuuj� }�(j� }�(j� K:j� Kuj� }�(j� K:j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� js j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �N$validSdks = ['php', 'go', 'python', 'java', 'dotnet', 'js', 'laravel', null];�j� ]�u}�(j� �$index�j� K
j� }�(j� }�(j� K@j� Kuj� }�(j� K@j� Kuuj� }�(j� }�(j� K@j� Kuj� }�(j� K@j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �4$index = DocumentationIndexSingleton::getInstance();�j� ]�u}�(j� � $keyTerms�j� K
j� }�(j� }�(j� KGj� Kuj� }�(j� KGj� Kuuj� }�(j� }�(j� KGj� Kuj� }�(j� KGj� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �-$keyTerms = $this->extractKeyTerms($content);�j� ]�u}�(j� �$similarChunks�j� K
j� }�(j� }�(j� KOj� Kuj� }�(j� KOj� Kuuj� }�(j� }�(j� KOj� Kuj� }�(j� KOj� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$similarChunks = [];�j� ]�u}�(j� �$keyTerm�j� K
j� }�(j� }�(j� KQj� Kuj� }�(j� KQj� K&uuj� }�(j� }�(j� KQj� Kuj� }�(j� KQj� K&uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$keyTerm) {�j� ]�u}�(j� �$chunks�j� K
j� }�(j� }�(j� KRj� Kuj� }�(j� KRj� Kuuj� }�(j� }�(j� KRj� Kuj� }�(j� KRj� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �;$chunks = $index->searchChunks($keyTerm, $sdk, $limit * 2);�j� ]�u}�(j� �$chunk�j� K
j� }�(j� }�(j� KTj� K uj� }�(j� KTj� K&uuj� }�(j� }�(j� KTj� K uj� }�(j� KTj� K&uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� � $chunk) {�j� ]�u}�(j� �
$chunkContent�j� K
j� }�(j� }�(j� KWj� Kuj� }�(j� KWj� Kuuj� }�(j� }�(j� KWj� Kuj� }�(j� KWj� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �C$chunkContent = $this->getChunkContent($chunk['chunk_id'], $index);�j� ]�u}�(j� �$similarity�j� K
j� }�(j� }�(j� KXj� Kuj� }�(j� KXj� Kuuj� }�(j� }�(j� KXj� Kuj� }�(j� KXj� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �B$similarity = $this->calculateSimilarity($content, $chunkContent);�j� ]�u}�(j� �$chunkWithSimilarity�j� K
j� }�(j� }�(j� K\j� Kuj� }�(j� K\j� K(uuj� }�(j� }�(j� K\j� Kuj� }�(j� K\j� K(uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$chunkWithSimilarity = $chunk;�j� ]�u}�(j� �$chunkWithSimilarity�j� K
j� }�(j� }�(j� K]j� Kuj� }�(j� K]j� K(uuj� }�(j� }�(j� K]j� Kuj� }�(j� K]j� K(uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$chunkWithSimilarity['similarity'] = $similarity;�j� ]�u}�(j� �$chunkWithSimilarity�j� K
j� }�(j� }�(j� K^j� Kuj� }�(j� K^j� K(uuj� }�(j� }�(j� K^j� Kuj� }�(j� K^j� K(uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �0$chunkWithSimilarity['content'] = $chunkContent;�j� ]�u}�(j� � $chunkKey�j� K
j� }�(j� }�(j� K`j� Kuj� }�(j� K`j� Kuuj� }�(j� }�(j� K`j� Kuj� }�(j� K`j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �6$chunkKey = $chunk['sdk'] . '::' . $chunk['chunk_id'];�j� ]�u}�(j� �$similarChunks�j� K
j� }�(j� }�(j� Kcj� Kuj� }�(j� Kcj� K&uuj� }�(j� }�(j� Kcj� Kuj� }�(j� Kcj� K&uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$similarChunks[$chunkKey] = $chunkWithSimilarity;�j� ]�u}�(j� � $chunkKey�j� K
j� }�(j� }�(j� Kcj� K'uj� }�(j� Kcj� K0uuj� }�(j� }�(j� Kcj� K'uj� }�(j� Kcj� K0uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j) j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"$chunkKey] = $chunkWithSimilarity;�j� ]�u}�(j� �$existingSim�j� K
j� }�(j� }�(j� Kej� Kuj� }�(j� Kej� K$uuj� }�(j� }�(j� Kej� Kuj� }�(j� Kej� K$uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j6 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �7$existingSim = $similarChunks[$chunkKey]['similarity'];�j� ]�u}�(j� �$similarChunks�j� K
j� }�(j� }�(j� Khj� Kuj� }�(j� Khj� K*uuj� }�(j� }�(j� Khj� Kuj� }�(j� Khj� K*uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jC j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$similarChunks[$chunkKey] = $chunkWithSimilarity;�j� ]�u}�(j� � $chunkKey�j� K
j� }�(j� }�(j� Khj� K+uj� }�(j� Khj� K4uuj� }�(j� }�(j� Khj� K+uj� }�(j� Khj� K4uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jP j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"$chunkKey] = $chunkWithSimilarity;�j� ]�u}�(j� �Closure�j� Kj� }�(j� }�(j� Kpj� Kuj� }�(j� Kvj� K uuj� }�(j� }�(j� Kpj� Kuj� }�(j� Kvj� K uuj ]�(}�(j� �$a�j� K
j� }�(j� }�(j� Kpj� K/uj� }�(j� Kpj� K7uuj� }�(j� }�(j� Kpj� K5uj� }�(j� Kpj� K7uuj j[ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jf j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �array $a, array $b): int {�j� ]�u}�(j� �$b�j� K
j� }�(j� }�(j� Kpj� K9uj� }�(j� Kpj� KAuuj� }�(j� }�(j� Kpj� K?uj� }�(j� Kpj� KAuuj j[ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� js j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �array $b): int {�j� ]�u}�(j� �$aSimilarity�j� K
j� }�(j� }�(j� Krj� Kuj� }�(j� Krj� Kuuj� }�(j� }�(j� Krj� Kuj� }�(j� Krj� Kuuj j[ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �`$aSimilarity = isset($a['similarity']) && is_numeric($a['similarity']) ? $a['similarity'] : 0.0;�j� ]�u}�(j� �$bSimilarity�j� K
j� }�(j� }�(j� Ksj� Kuj� }�(j� Ksj� Kuuj� }�(j� }�(j� Ksj� Kuj� }�(j� Ksj� Kuuj j[ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �`$bSimilarity = isset($b['similarity']) && is_numeric($b['similarity']) ? $b['similarity'] : 0.0;�j� ]�uej j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j] j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X� static function (array $a, array $b): int {
// Since we know similarity is added above, we can safely access it
$aSimilarity = isset($a['similarity']) && is_numeric($a['similarity']) ? $a['similarity'] : 0.0;
$bSimilarity = isset($b['similarity']) && is_numeric($b['similarity']) ? $b['similarity'] : 0.0;
return $bSimilarity <=> $aSimilarity;
});�u}�(j� �$similarChunks�j� K
j� }�(j� }�(j� Kyj� Kuj� }�(j� Kyj� Kuuj� }�(j� }�(j� Kyj� Kuj� }�(j� Kyj� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �8$similarChunks = array_slice($similarChunks, 0, $limit);�j� ]�u}�(j� � $markdown�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �+$markdown = "## Similar Documentation\n\n";�j� ]�u}�(j� �$chunkIndex�j� K
j� }�(j� }�(j� K�j� K#uj� }�(j� K�j� K.uuj� }�(j� }�(j� K�j� K#uj� }�(j� K�j� K.uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$chunkIndex => $chunk) {�j� ]�u}�(j� �$chunk�j� K
j� }�(j� }�(j� K�j� K2uj� }�(j� K�j� K8uuj� }�(j� }�(j� K�j� K2uj� }�(j� K�j� K8uuj j4 j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� � $chunk) {�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j6 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X� /**
* Find documentation similar to provided content.
*
* @param string $content Reference content to find similar documentation
* @param string|null $sdk Limit search to specific SDK
* @param float $similarity_threshold Minimum similarity score (0.0-1.0, default: 0.5)
* @param int $limit Maximum number of results (default: 5)
*
* @throws RuntimeException If documentation index initialization fails
*
* @return string Markdown-formatted related documentation
*/
#[McpTool(name: 'find_similar_documentation')]
public function findSimilarDocumentation(
string $content,
?string $sdk = null,
float $similarity_threshold = 0.5,
int $limit = 5,
): string {
if ('' === trim($content)) {
return '❌ Content cannot be empty';
}
if (0.0 > $similarity_threshold || 1.0 < $similarity_threshold) {
return '❌ Similarity threshold must be between 0.0 and 1.0';
}
if (1 > $limit || 20 < $limit) {
return '❌ Limit must be between 1 and 20';
}
$validSdks = ['php', 'go', 'python', 'java', 'dotnet', 'js', 'laravel', null];
if (! in_array($sdk, $validSdks, true)) {
return '❌ Invalid SDK. Must be one of: php, go, python, java, dotnet, js, laravel';
}
$index = DocumentationIndexSingleton::getInstance();
if (! $index->isInitialized()) {
$index->initialize();
}
// Extract key terms from content for similarity matching
$keyTerms = $this->extractKeyTerms($content);
if ([] === $keyTerms) {
return '❌ Could not extract meaningful terms from the provided content';
}
// Search for similar content using key terms
/** @var array<string, array{chunk_id: string, sdk: string, score: float, preview: string, metadata: array<mixed>, similarity?: float, content?: string}> $similarChunks */
$similarChunks = [];
foreach ($keyTerms as $keyTerm) {
$chunks = $index->searchChunks($keyTerm, $sdk, $limit * 2);
foreach ($chunks as $chunk) {
// Get content from the chunk to calculate similarity
// We need to get the actual content - the preview is just a snippet
$chunkContent = $this->getChunkContent($chunk['chunk_id'], $index);
$similarity = $this->calculateSimilarity($content, $chunkContent);
if ($similarity >= $similarity_threshold) {
// Add similarity and content to the chunk
$chunkWithSimilarity = $chunk;
$chunkWithSimilarity['similarity'] = $similarity;
$chunkWithSimilarity['content'] = $chunkContent;
$chunkKey = $chunk['sdk'] . '::' . $chunk['chunk_id'];
if (! isset($similarChunks[$chunkKey])) {
$similarChunks[$chunkKey] = $chunkWithSimilarity;
} elseif (isset($similarChunks[$chunkKey]['similarity'])) {
$existingSim = $similarChunks[$chunkKey]['similarity'];
if ($existingSim < $similarity) {
$similarChunks[$chunkKey] = $chunkWithSimilarity;
}
}
}
}
}
// Sort by similarity score
usort($similarChunks, static function (array $a, array $b): int {
// Since we know similarity is added above, we can safely access it
$aSimilarity = isset($a['similarity']) && is_numeric($a['similarity']) ? $a['similarity'] : 0.0;
$bSimilarity = isset($b['similarity']) && is_numeric($b['similarity']) ? $b['similarity'] : 0.0;
return $bSimilarity <=> $aSimilarity;
});
// Apply limit
$similarChunks = array_slice($similarChunks, 0, $limit);
if ([] === $similarChunks) {
return "## Similar Documentation\n\nNo similar documentation found (threshold: {$similarity_threshold})" .
(null !== $sdk ? ' in SDK: ' . $sdk : '') .
"\n\nTry:\n- Lowering the similarity threshold\n- Providing more specific content\n- Removing SDK filter for broader results";
}
// Build markdown response
$markdown = "## Similar Documentation\n\n";
$markdown .= sprintf('**Similarity Threshold:** %s%s', $similarity_threshold, PHP_EOL);
if (null !== $sdk) {
$markdown .= sprintf('**SDK Filter:** %s%s', $sdk, PHP_EOL);
}
$markdown .= '**Found:** ' . count($similarChunks) . " similar document(s)\n\n";
$markdown .= "---\n\n";
foreach ($similarChunks as $chunkIndex => $chunk) {
$markdown .= $this->formatSimilarResult($chunk, $chunkIndex + 1);
}
return $markdown;
}�u}�(j� �searchCodeExamples�j� Kj� }�(j� }�(j� K�j� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� K&uuj ]�(}�(j� �$query�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �string $query,�j� ]�u}�(j� � $language�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� K uuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $language = null,�j� ]�u}�(j� �$include_context�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� K$uuj� }�(j� }�(j� K�j� K
uj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �bool $include_context = true,�j� ]�u}�(j� �$limit�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $limit = 5,�j� ]�u}�(j� �$offset�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $offset = 0,�j� ]�u}�(j� �$validLanguages�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �^$validLanguages = ['php', 'go', 'python', 'java', 'csharp', 'javascript', 'typescript', null];�j� ]�u}�(j� �$index�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j- j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �4$index = DocumentationIndexSingleton::getInstance();�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j: j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �*$sdk = $this->mapLanguageToSdk($language);�j� ]�u}�(j� �
$allChunks�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jG j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �0$allChunks = $index->searchChunks($query, $sdk);�j� ]�u}�(j� �
$codeExamples�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jT j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$codeExamples = [];�j� ]�u}�(j� � $allChunk�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� K(uuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� K(uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� ja j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$allChunk) {�j� ]�u}�(j� �
$chunkContent�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jn j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �F$chunkContent = $this->getChunkContent($allChunk['chunk_id'], $index);�j� ]�u}�(j� �$chunkWithContent�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j{ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$chunkWithContent = $allChunk;�j� ]�u}�(j� �$chunkWithContent�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �-$chunkWithContent['content'] = $chunkContent;�j� ]�u}�(j� � $examples�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �F$examples = $this->extractCodeFromChunk($chunkWithContent, $language);�j� ]�u}�(j� �$example�j� K
j� }�(j� }�(j� K�j� K"uj� }�(j� K�j� K*uuj� }�(j� }�(j� K�j� K"uj� }�(j� K�j� K*uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$example) {�j� ]�u}�(j� �$example�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$example['chunk'] = $allChunk;�j� ]�u}�(j� �
$codeExamples�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$codeExamples[] = $example;�j� ]�u}�(j� �$totalExamples�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �&$totalExamples = count($codeExamples);�j� ]�u}�(j� �$paginatedExamples�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �A$paginatedExamples = array_slice($codeExamples, $offset, $limit);�j� ]�u}�(j� �$currentPage�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$currentPage = (int) floor($offset / $limit) + 1;�j� ]�u}�(j� �$totalPages�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �2$totalPages = (int) ceil($totalExamples / $limit);�j� ]�u}�(j� � $markdown�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �#$markdown = "## Code Examples\n\n";�j� ]�u}�(j� �
$exampleIndex�j� K
j� }�(j� }�(j� K�j� K'uj� }�(j� K�j� K4uuj� }�(j� }�(j� K�j� K'uj� }�(j� K�j� K4uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$exampleIndex => $example) {�j� ]�u}�(j� �$example�j� K
j� }�(j� }�(j� K�j� K8uj� }�(j� K�j� K@uuj� }�(j� }�(j� K�j� K8uj� }�(j� K�j� K@uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$example) {�j� ]�u}�(j� �$exampleNumber�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j$ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �-$exampleNumber = $offset + $exampleIndex + 1;�j� ]�u}�(j� �$prevOffset�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j1 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �'$prevOffset = max(0, $offset - $limit);�j� ]�u}�(j� �$nextOffset�j� K
j� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj� }�(j� }�(j� K�j� Kuj� }�(j� K�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j> j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$nextOffset = $offset + $limit;�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X� /**
* Search for code examples in documentation.
*
* @param string $query Code pattern or concept to find
* @param string|null $language Programming language filter (php, go, python, java, csharp, javascript, typescript)
* @param bool $include_context Include surrounding explanatory context
* @param int $limit Maximum number of examples to return (default: 5)
* @param int $offset Pagination offset for results (default: 0)
*
* @throws RuntimeException If documentation index initialization fails
*
* @return string Markdown-formatted code examples with descriptions
*/
#[McpTool(name: 'search_code_examples')]
public function searchCodeExamples(
string $query,
?string $language = null,
bool $include_context = true,
int $limit = 5,
int $offset = 0,
): string {
if ('' === trim($query)) {
return '❌ Search query cannot be empty';
}
if (1 > $limit || 20 < $limit) {
return '❌ Limit must be between 1 and 20';
}
if (0 > $offset) {
return '❌ Offset cannot be negative';
}
$validLanguages = ['php', 'go', 'python', 'java', 'csharp', 'javascript', 'typescript', null];
if (! in_array($language, $validLanguages, true)) {
return '❌ Invalid language. Must be one of: php, go, python, java, csharp, javascript, typescript';
}
$index = DocumentationIndexSingleton::getInstance();
if (! $index->isInitialized()) {
$index->initialize();
}
// Map language to SDK if applicable
$sdk = $this->mapLanguageToSdk($language);
// Search for code-related chunks
$allChunks = $index->searchChunks($query, $sdk);
$codeExamples = [];
foreach ($allChunks as $allChunk) {
// Get the full content for this chunk
$chunkContent = $this->getChunkContent($allChunk['chunk_id'], $index);
$chunkWithContent = $allChunk;
$chunkWithContent['content'] = $chunkContent;
$examples = $this->extractCodeFromChunk($chunkWithContent, $language);
foreach ($examples as $example) {
$example['chunk'] = $allChunk;
$codeExamples[] = $example;
}
}
$totalExamples = count($codeExamples);
if (0 === $totalExamples) {
return "## Code Examples
No code examples found for: **{$query}**" .
(null !== $language ? sprintf(' (language: %s)', $language) : '') .
"\n\nTry:\n- Searching for specific method or class names\n- Using OpenFGA terminology (e.g., 'check', 'expand', 'tuples')\n- Removing language filter for broader results";
}
// Apply pagination
$paginatedExamples = array_slice($codeExamples, $offset, $limit);
$currentPage = (int) floor($offset / $limit) + 1;
$totalPages = (int) ceil($totalExamples / $limit);
// Build markdown response
$markdown = "## Code Examples\n\n";
$markdown .= "**Search:** `{$query}`\n";
if (null !== $language) {
$markdown .= sprintf('**Language:** %s%s', $language, PHP_EOL);
}
$markdown .= '**Results:** Showing ' . ($offset + 1) . '-' . min($offset + $limit, $totalExamples) . " of {$totalExamples} examples\n\n";
$markdown .= "---\n\n";
foreach ($paginatedExamples as $exampleIndex => $example) {
$exampleNumber = $offset + $exampleIndex + 1;
$markdown .= $this->formatCodeExample($example, $exampleNumber, $include_context);
}
// Add pagination info
if (1 < $totalPages) {
$markdown .= "\n---\n\n### Pagination\n\n";
if (1 < $currentPage) {
$prevOffset = max(0, $offset - $limit);
$markdown .= sprintf('- **Previous page:** Use offset=%d%s', $prevOffset, PHP_EOL);
}
if ($currentPage < $totalPages) {
$nextOffset = $offset + $limit;
$markdown .= sprintf('- **Next page:** Use offset=%d%s', $nextOffset, PHP_EOL);
}
}
return $markdown;
}�u}�(j� �searchDocumentation�j� Kj� }�(j� }�(j� Mj� Kuj� }�(j� Mij� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� K'uuj ]�(}�(j� �$query�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jX j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �string $query,�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� je j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $sdk = null,�j� ]�u}�(j� �$search_type�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� K'uuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jr j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� � string $search_type = 'content',�j� ]�u}�(j� �$limit�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $limit = 10,�j� ]�u}�(j� �$offset�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $offset = 0,�j� ]�u}�(j� �$validSearchTypes�j� K
j� }�(j� }�(j� M%j� Kuj� }�(j� M%j� Kuuj� }�(j� }�(j� M%j� Kuj� }�(j� M%j� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �>$validSearchTypes = ['content', 'class', 'method', 'section'];�j� ]�u}�(j� �
$validSdks�j� K
j� }�(j� }�(j� M+j� Kuj� }�(j� M+j� Kuuj� }�(j� }�(j� M+j� Kuj� }�(j� M+j� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �N$validSdks = ['php', 'go', 'python', 'java', 'dotnet', 'js', 'laravel', null];�j� ]�u}�(j� �$index�j� K
j� }�(j� }�(j� M1j� Kuj� }�(j� M1j� Kuuj� }�(j� }�(j� M1j� Kuj� }�(j� M1j� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �4$index = DocumentationIndexSingleton::getInstance();�j� ]�u}�(j� �$allResults�j� K
j� }�(j� }�(j� M8j� Kuj� }�(j� M8j� Kuuj� }�(j� }�(j� M8j� Kuj� }�(j� M8j� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �G$allResults = $this->performSearch($index, $query, $sdk, $search_type);�j� ]�u}�(j� �
$totalResults�j� K
j� }�(j� }�(j� M9j� Kuj� }�(j� M9j� Kuuj� }�(j� }�(j� M9j� Kuj� }�(j� M9j� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �#$totalResults = count($allResults);�j� ]�u}�(j� �$paginatedResults�j� K
j� }�(j� }�(j� MDj� Kuj� }�(j� MDj� Kuuj� }�(j� }�(j� MDj� Kuj� }�(j� MDj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �>$paginatedResults = array_slice($allResults, $offset, $limit);�j� ]�u}�(j� �$currentPage�j� K
j� }�(j� }�(j� MEj� Kuj� }�(j� MEj� Kuuj� }�(j� }�(j� MEj� Kuj� }�(j� MEj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$currentPage = (int) floor($offset / $limit) + 1;�j� ]�u}�(j� �$totalPages�j� K
j� }�(j� }�(j� MFj� Kuj� }�(j� MFj� Kuuj� }�(j� }�(j� MFj� Kuj� }�(j� MFj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$totalPages = (int) ceil($totalResults / $limit);�j� ]�u}�(j� � $markdown�j� K
j� }�(j� }�(j� MIj� Kuj� }�(j� MIj� Kuuj� }�(j� }�(j� MIj� Kuj� }�(j� MIj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �2$markdown = "## Documentation Search Results\n\n";�j� ]�u}�(j� �$resultIndex�j� K
j� }�(j� }�(j� MTj� K&uj� }�(j� MTj� K2uuj� }�(j� }�(j� MTj� K&uj� }�(j� MTj� K2uuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$resultIndex => $result) {�j� ]�u}�(j� �$result�j� K
j� }�(j� }�(j� MTj� K6uj� }�(j� MTj� K=uuj� }�(j� }�(j� MTj� K6uj� }�(j� MTj� K=uuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �
$result) {�j� ]�u}�(j� �
$resultNumber�j� K
j� }�(j� }�(j� MUj� Kuj� }�(j� MUj� Kuuj� }�(j� }�(j� MUj� Kuj� }�(j� MUj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j( j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �1$resultNumber = $offset + (int) $resultIndex + 1;�j� ]�u}�(j� �$prevOffset�j� K
j� }�(j� }�(j� M^j� Kuj� }�(j� M^j� Kuuj� }�(j� }�(j� M^j� Kuj� }�(j� M^j� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j5 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �'$prevOffset = max(0, $offset - $limit);�j� ]�u}�(j� �$nextOffset�j� K
j� }�(j� }�(j� Mcj� Kuj� }�(j� Mcj� Kuuj� }�(j� }�(j� Mcj� Kuj� }�(j� Mcj� Kuuj jM j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jB j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$nextOffset = $offset + $limit;�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jO j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X� /**
* Advanced documentation search with filtering and pagination.
*
* @param string $query Search query to find in documentation
* @param string|null $sdk Filter by specific SDK (php, go, python, java, dotnet, js, laravel)
* @param string $search_type Type of search: content (default), class, method, or section
* @param int $limit Maximum number of results to return (default: 10)
* @param int $offset Pagination offset for results (default: 0)
*
* @throws RuntimeException If documentation index initialization fails
*
* @return string Markdown-formatted search results with pagination metadata
*/
#[McpTool(name: 'search_documentation')]
public function searchDocumentation(
string $query,
?string $sdk = null,
string $search_type = 'content',
int $limit = 10,
int $offset = 0,
): string {
if ('' === trim($query)) {
return '❌ Search query cannot be empty';
}
if (1 > $limit || 50 < $limit) {
return '❌ Limit must be between 1 and 50';
}
if (0 > $offset) {
return '❌ Offset cannot be negative';
}
$validSearchTypes = ['content', 'class', 'method', 'section'];
if (! in_array($search_type, $validSearchTypes, true)) {
return '❌ Invalid search_type. Must be one of: ' . implode(', ', $validSearchTypes);
}
$validSdks = ['php', 'go', 'python', 'java', 'dotnet', 'js', 'laravel', null];
if (! in_array($sdk, $validSdks, true)) {
return '❌ Invalid SDK. Must be one of: php, go, python, java, dotnet, js, laravel';
}
$index = DocumentationIndexSingleton::getInstance();
if (! $index->isInitialized()) {
$index->initialize();
}
// Get all results first for total count
$allResults = $this->performSearch($index, $query, $sdk, $search_type);
$totalResults = count($allResults);
if (0 === $totalResults) {
return "## Documentation Search Results
No results found for query: **{$query}**" .
(null !== $sdk ? sprintf(' (filtered by SDK: %s)', $sdk) : '') .
"\n\nTry:\n- Using different keywords\n- Checking spelling\n- Using broader search terms";
}
// Apply pagination
$paginatedResults = array_slice($allResults, $offset, $limit);
$currentPage = (int) floor($offset / $limit) + 1;
$totalPages = (int) ceil($totalResults / $limit);
// Build markdown response
$markdown = "## Documentation Search Results\n\n";
$markdown .= "**Query:** `{$query}`\n";
if (null !== $sdk) {
$markdown .= sprintf('**SDK Filter:** %s%s', $sdk, PHP_EOL);
}
$markdown .= sprintf('**Search Type:** %s%s', $search_type, PHP_EOL);
$markdown .= '**Results:** Showing ' . ($offset + 1) . '-' . min($offset + $limit, $totalResults) . " of {$totalResults} total results\n";
$markdown .= "**Page:** {$currentPage} of {$totalPages}\n\n";
$markdown .= "---\n\n";
foreach ($paginatedResults as $resultIndex => $result) {
$resultNumber = $offset + (int) $resultIndex + 1;
$markdown .= $this->formatSearchResult($result, $resultNumber);
}
// Add pagination info
if (1 < $totalPages) {
$markdown .= "\n---\n\n### Pagination\n\n";
if (1 < $currentPage) {
$prevOffset = max(0, $offset - $limit);
$markdown .= sprintf('- **Previous page:** Use offset=%d%s', $prevOffset, PHP_EOL);
}
if ($currentPage < $totalPages) {
$nextOffset = $offset + $limit;
$markdown .= sprintf('- **Next page:** Use offset=%d%s', $nextOffset, PHP_EOL);
}
}
return $markdown;
}�u}�(j� �calculateSimilarity�j� Kj� }�(j� }�(j� Mkj� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� Mrj� Kuj� }�(j� Mrj� K(uuj ]�(}�(j� � $content1�j� K
j� }�(j� }�(j� Mrj� K)uj� }�(j� Mrj� K9uuj� }�(j� }�(j� Mrj� K0uj� }�(j� Mrj� K9uuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j\ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �*string $content1, string $content2): float�j� ]�u}�(j� � $content2�j� K
j� }�(j� }�(j� Mrj� K;uj� }�(j� Mrj� KKuuj� }�(j� }�(j� Mrj� KBuj� }�(j� Mrj� KKuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� ji j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�� j� j� uj� �string $content2): float�j� ]�u}�(j� �$terms1�j� K
j� }�(j� }�(j� Myj� Kuj� }�(j� Myj� Kuuj� }�(j� }�(j� Myj� Kuj� }�(j� Myj� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jv j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �,$terms1 = $this->extractKeyTerms($content1);�j� ]�u}�(j� �$terms2�j� K
j� }�(j� }�(j� Mzj� Kuj� }�(j� Mzj� Kuuj� }�(j� }�(j� Mzj� Kuj� }�(j� Mzj� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �,$terms2 = $this->extractKeyTerms($content2);�j� ]�u}�(j� �
$intersection�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �9$intersection = count(array_intersect($terms1, $terms2));�j� ]�u}�(j� �$union�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �<$union = count(array_unique(array_merge($terms1, $terms2)));�j� ]�u}�(j� �$jaccard�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �,$jaccard = (float) ($intersection / $union);�j� ]�u}�(j� �$phrases�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$phrases = [�j� ]�u}�(j� �$phraseBonus�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$phraseBonus = 0.0;�j� ]�u}�(j� �$phrase�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K$uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K$uuj jQ j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �
$phrase) {�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jS j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X /**
* Calculate similarity between two pieces of content.
*
* @param string $content1
* @param string $content2
* @return float Similarity score between 0 and 1
*/
private function calculateSimilarity(string $content1, string $content2): float
{
if ('' === $content1 || '' === $content2) {
return 0.0;
}
// Extract terms from both contents
$terms1 = $this->extractKeyTerms($content1);
$terms2 = $this->extractKeyTerms($content2);
if ([] === $terms1 || [] === $terms2) {
return 0.0;
}
// Calculate Jaccard similarity
$intersection = count(array_intersect($terms1, $terms2));
$union = count(array_unique(array_merge($terms1, $terms2)));
// Union will always be at least 1 since we checked both term arrays are non-empty
$jaccard = (float) ($intersection / $union);
// Also check for exact phrase matches for higher similarity
$phrases = [
'authorization model',
'permission check',
'tuple creation',
'relationship tuples',
'access control',
'openfga',
];
$phraseBonus = 0.0;
foreach ($phrases as $phrase) {
if (false !== stripos($content1, $phrase) && false !== stripos($content2, $phrase)) {
$phraseBonus += 0.1;
}
}
// Combine scores (cap at 1.0)
return min(1.0, $jaccard + $phraseBonus);
}�u}�(j� �extractCodeFromChunk�j� Kj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K)uuj ]�(}�(j� �$chunk�j� K
j� }�(j� }�(j� M�j� K*uj� }�(j� M�j� K6uuj� }�(j� }�(j� M�j� K0uj� }�(j� M�j� K6uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �'array $chunk, ?string $language): array�j� ]�u}�(j� � $language�j� K
j� }�(j� }�(j� M�j� K8uj� }�(j� M�j� KIuuj� }�(j� }�(j� M�j� K@uj� }�(j� M�j� KIuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $language): array�j� ]�u}�(j� �$content�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �f$content = isset($chunk['content']) && is_scalar($chunk['content']) ? (string) $chunk['content'] : '';�j� ]�u}�(j� � $examples�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$examples = [];�j� ]�u}�(j� �$pattern�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �&$pattern = '/```(\w+)?\n(.*?)\n```/s';�j� ]�u}�(j� �$result�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j, j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �G$result = preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);�j� ]�u}�(j� �$match�j� K
j� }�(j� }�(j� M�j� K!uj� }�(j� M�j� K'uuj� }�(j� }�(j� M�j� K!uj� }�(j� M�j� K'uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j9 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� � $match) {�j� ]�u}�(j� � $codeLang�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jF j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$codeLang = $match[1];�j� ]�u}�(j� �$codeContent�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jS j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$codeContent = $match[2];�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j` j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$langMatch = false;�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jm j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �M$langMatch = 'php' === $codeLang || false !== stripos($codeContent, '<?php');�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jz j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �L$langMatch = 'go' === $codeLang || false !== stripos($codeContent, 'func ');�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �e$langMatch = 'python' === $codeLang || 'py' === $codeLang || false !== stripos($codeContent, 'def ');�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �U$langMatch = 'java' === $codeLang || false !== stripos($codeContent, 'public class');�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �g$langMatch = 'csharp' === $codeLang || 'cs' === $codeLang || false !== stripos($codeContent, 'using ');�j� ]�u}�(j� �
$langMatch�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �Q$langMatch = in_array($codeLang, ['javascript', 'js', 'typescript', 'ts'], true);�j� ]�u}�(j� � $examples�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$examples[] = [�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X /**
* Extract code examples from a chunk.
*
* @param array<string, mixed> $chunk
* @param string|null $language
* @return array<array<string, mixed>>
*/
private function extractCodeFromChunk(array $chunk, ?string $language): array
{
$content = isset($chunk['content']) && is_scalar($chunk['content']) ? (string) $chunk['content'] : '';
$examples = [];
// Match code blocks with optional language specification
$pattern = '/```(\w+)?\n(.*?)\n```/s';
$result = preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);
if (false !== $result && 0 < $result) {
foreach ($matches as $match) {
// When preg_match_all succeeds with PREG_SET_ORDER, capture groups exist
// Optional groups will be empty strings if they don't match
/** @var array{0: string, 1: string, 2: string} $match */
$codeLang = $match[1];
$codeContent = $match[2];
// Filter by language if specified
if (null !== $language) {
$langMatch = false;
switch ($language) {
case 'php':
$langMatch = 'php' === $codeLang || false !== stripos($codeContent, '<?php');
break;
case 'go':
$langMatch = 'go' === $codeLang || false !== stripos($codeContent, 'func ');
break;
case 'python':
$langMatch = 'python' === $codeLang || 'py' === $codeLang || false !== stripos($codeContent, 'def ');
break;
case 'java':
$langMatch = 'java' === $codeLang || false !== stripos($codeContent, 'public class');
break;
case 'csharp':
$langMatch = 'csharp' === $codeLang || 'cs' === $codeLang || false !== stripos($codeContent, 'using ');
break;
case 'javascript':
case 'typescript':
$langMatch = in_array($codeLang, ['javascript', 'js', 'typescript', 'ts'], true);
break;
}
if (! $langMatch) {
continue;
}
}
$examples[] = [
'language' => '' !== $codeLang ? $codeLang : 'unknown',
'code' => $codeContent,
'context' => $this->extractContext($content, $match[0]),
];
}
}
return $examples;
}�u}�(j� �extractContext�j� Kj� }�(j� }�(j� M�j� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K#uuj ]�(}�(j� �$content�j� K
j� }�(j� }�(j� M�j� K$uj� }�(j� M�j� K3uuj� }�(j� }�(j� M�j� K+uj� }�(j� M�j� K3uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �+string $content, string $codeBlock): string�j� ]�u}�(j� �
$codeBlock�j� K
j� }�(j� }�(j� M�j� K5uj� }�(j� M�j� KFuuj� }�(j� }�(j� M�j� K<uj� }�(j� M�j� KFuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �string $codeBlock): string�j� ]�u}�(j� � $position�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �)$position = strpos($content, $codeBlock);�j� ]�u}�(j� �$beforeStart�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �'$beforeStart = max(0, $position - 200);�j� ]�u}�(j� �$beforeText�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �G$beforeText = substr($content, $beforeStart, $position - $beforeStart);�j� ]�u}�(j� �$afterStart�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �-$afterStart = $position + strlen($codeBlock);�j� ]�u}�(j� �
$afterText�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j# j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �0$afterText = substr($content, $afterStart, 200);�j� ]�u}�(j� �$beforeText�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j0 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �B$beforeText = trim(preg_replace('/\s+/', ' ', $beforeText) ?? '');�j� ]�u}�(j� �
$afterText�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j= j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �@$afterText = trim(preg_replace('/\s+/', ' ', $afterText) ?? '');�j� ]�u}�(j� �$context�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jJ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$context = '';�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� Xn /**
* Extract context around code.
*
* @param string $content
* @param string $codeBlock
*/
private function extractContext(string $content, string $codeBlock): string
{
$position = strpos($content, $codeBlock);
if (false === $position) {
return '';
}
// Get text before the code block (up to 200 chars)
$beforeStart = max(0, $position - 200);
$beforeText = substr($content, $beforeStart, $position - $beforeStart);
// Get text after the code block (up to 200 chars)
$afterStart = $position + strlen($codeBlock);
$afterText = substr($content, $afterStart, 200);
// Clean up and combine
$beforeText = trim(preg_replace('/\s+/', ' ', $beforeText) ?? '');
$afterText = trim(preg_replace('/\s+/', ' ', $afterText) ?? '');
$context = '';
if ('' !== $beforeText) {
$context .= '...' . $beforeText;
}
$context .= ' [CODE] ';
if ('' !== $afterText) {
$context .= $afterText . '...';
}
return trim($context);
}�u}�(j� �extractKeyTerms�j� Kj� }�(j� }�(j� Mj� Kuj� }�(j� M@j� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� K$uuj ]�(}�(j� �$content�j� K
j� }�(j� }�(j� Mj� K%uj� }�(j� Mj� K4uuj� }�(j� }�(j� Mj� K,uj� }�(j� Mj� K4uuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jd j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �string $content): array�j� ]�u}�(j� �
$cleanContent�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jq j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?$cleanContent = preg_replace('/```[\s\S]*?```/', '', $content);�j� ]�u}�(j� �
$cleanContent�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j~ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$cleanContent ??= '';�j� ]�u}�(j� �
$cleanContent�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �E$cleanContent = preg_replace('/[^a-zA-Z0-9\s]/', ' ', $cleanContent);�j� ]�u}�(j� �
$cleanContent�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$cleanContent ??= '';�j� ]�u}�(j� �$words�j� K
j� }�(j� }�(j� M!j� Kuj� }�(j� M!j� Kuuj� }�(j� }�(j� M!j� Kuj� }�(j� M!j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �8$words = preg_split('/\s+/', strtolower($cleanContent));�j� ]�u}�(j� �$words�j� K
j� }�(j� }�(j� M"j� Kuj� }�(j� M"j� Kuuj� }�(j� }�(j� M"j� Kuj� }�(j� M"j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �($words = false !== $words ? $words : [];�j� ]�u}�(j� �
$stopWords�j� K
j� }�(j� }�(j� M%j� Kuj� }�(j� M%j� Kuuj� }�(j� }�(j� M%j� Kuj� }�(j� M%j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X� $stopWords = ['the', 'is', 'at', 'which', 'on', 'and', 'a', 'an', 'as', 'are', 'was', 'were', 'been', 'be', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'must', 'can', 'this', 'that', 'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they', 'what', 'which', 'who', 'when', 'where', 'why', 'how', 'all', 'each', 'every', 'both', 'few', 'more', 'most', 'other', 'some', 'such', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just', 'in', 'of', 'to', 'for', 'with', 'from', 'up', 'out', 'if', 'about', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between', 'under', 'again', 'further', 'then', 'once'];�j� ]�u}�(j� �$termCounts�j� K
j� }�(j� }�(j� M'j� Kuj� }�(j� M'j� Kuuj� }�(j� }�(j� M'j� Kuj� }�(j� M'j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$termCounts = [];�j� ]�u}�(j� �$word�j� K
j� }�(j� }�(j� M)j� Kuj� }�(j� M)j� K uuj� }�(j� }�(j� M)j� Kuj� }�(j� M)j� K uuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$word) {�j� ]�u}�(j� �$termCounts�j� K
j� }�(j� }�(j� M,j� Kuj� }�(j� M,j� Kuuj� }�(j� }�(j� M,j� Kuj� }�(j� M,j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$termCounts[$word] = 0;�j� ]�u}�(j� �$word�j� K
j� }�(j� }�(j� M,j� K uj� }�(j� M,j� K%uuj� }�(j� }�(j� M,j� K uj� }�(j� M,j� K%uuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$word] = 0;�j� ]�u}�(j� � $keyTerms�j� K
j� }�(j� }�(j� M4j� Kuj� }�(j� M4j� Kuuj� }�(j� }�(j� M4j� Kuj� }�(j� M4j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �8$keyTerms = array_keys(array_slice($termCounts, 0, 10));�j� ]�u}�(j� �
$openfgaTerms�j� K
j� }�(j� }�(j� M7j� Kuj� }�(j� M7j� Kuuj� }�(j� }�(j� M7j� Kuj� }�(j� M7j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� ��$openfgaTerms = ['openfga', 'authorization', 'permission', 'tuple', 'relation', 'check', 'expand', 'store', 'model', 'user', 'object'];�j� ]�u}�(j� �$openfgaTerm�j� K
j� }�(j� }�(j� M9j� K"uj� }�(j� M9j� K.uuj� }�(j� }�(j� M9j� K"uj� }�(j� M9j� K.uuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$openfgaTerm) {�j� ]�u}�(j� � $keyTerms�j� K
j� }�(j� }�(j� M;j� Kuj� }�(j� M;j� Kuuj� }�(j� }�(j� M;j� Kuj� }�(j� M;j� Kuuj jY j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j'
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$keyTerms[] = $openfgaTerm;�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j[ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X� /**
* Extract key terms from content for similarity matching.
*
* @param string $content
* @return array<string>
*/
private function extractKeyTerms(string $content): array
{
// Remove code blocks and special characters
$cleanContent = preg_replace('/```[\s\S]*?```/', '', $content);
$cleanContent ??= '';
$cleanContent = preg_replace('/[^a-zA-Z0-9\s]/', ' ', $cleanContent);
$cleanContent ??= '';
// Extract words
$words = preg_split('/\s+/', strtolower($cleanContent));
$words = false !== $words ? $words : [];
// Filter out common words and short words
$stopWords = ['the', 'is', 'at', 'which', 'on', 'and', 'a', 'an', 'as', 'are', 'was', 'were', 'been', 'be', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'must', 'can', 'this', 'that', 'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they', 'what', 'which', 'who', 'when', 'where', 'why', 'how', 'all', 'each', 'every', 'both', 'few', 'more', 'most', 'other', 'some', 'such', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just', 'in', 'of', 'to', 'for', 'with', 'from', 'up', 'out', 'if', 'about', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between', 'under', 'again', 'further', 'then', 'once'];
$termCounts = [];
foreach ($words as $word) {
if (2 < strlen($word) && ! in_array($word, $stopWords, true)) {
if (! isset($termCounts[$word])) {
$termCounts[$word] = 0;
}
++$termCounts[$word];
}
}
// Sort by frequency and take top terms
arsort($termCounts);
$keyTerms = array_keys(array_slice($termCounts, 0, 10));
// Add OpenFGA-specific terms if present
$openfgaTerms = ['openfga', 'authorization', 'permission', 'tuple', 'relation', 'check', 'expand', 'store', 'model', 'user', 'object'];
foreach ($openfgaTerms as $openfgaTerm) {
if (false !== stripos($content, $openfgaTerm) && ! in_array($openfgaTerm, $keyTerms, true)) {
$keyTerms[] = $openfgaTerm;
}
}
return array_slice($keyTerms, 0, 15);
}�u}�(j� �formatCodeExample�j� Kj� }�(j� }�(j� MBj� Kuj� }�(j� Mvj� Kuuj� }�(j� }�(j� MIj� Kuj� }�(j� MIj� K&uuj ]�(}�(j� �$example�j� K
j� }�(j� }�(j� MIj� K'uj� }�(j� MIj� K5uuj� }�(j� }�(j� MIj� K-uj� }�(j� MIj� K5uuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jA
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �:array $example, int $number, bool $includeContext): string�j� ]�u}�(j� �$number�j� K
j� }�(j� }�(j� MIj� K7uj� }�(j� MIj� KBuuj� }�(j� }�(j� MIj� K;uj� }�(j� MIj� KBuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jN
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �*int $number, bool $includeContext): string�j� ]�u}�(j� �$includeContext�j� K
j� }�(j� }�(j� MIj� KDuj� }�(j� MIj� KXuuj� }�(j� }�(j� MIj� KIuj� }�(j� MIj� KXuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j[
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �bool $includeContext): string�j� ]�u}�(j� � $markdown�j� K
j� }�(j� }�(j� MKj� Kuj� }�(j� MKj� Kuuj� }�(j� }�(j� MKj� Kuj� }�(j� MKj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jh
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �($markdown = "### Example {$number}\n\n";�j� ]�u}�(j� �$chunk�j� K
j� }�(j� }�(j� MMj� Kuj� }�(j� MMj� Kuuj� }�(j� }�(j� MMj� Kuj� }�(j� MMj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� ju
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �Z$chunk = isset($example['chunk']) && is_array($example['chunk']) ? $example['chunk'] : [];�j� ]�u}�(j� � $chunkSdk�j� K
j� }�(j� }�(j� MQj� Kuj� }�(j� MQj� Kuuj� }�(j� }�(j� MQj� Kuj� }�(j� MQj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �C$chunkSdk = is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : '';�j� ]�u}�(j� � $metadata�j� K
j� }�(j� }�(j� MVj� Kuj� }�(j� MVj� Kuuj� }�(j� }�(j� MVj� Kuj� }�(j� MVj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �`$metadata = isset($chunk['metadata']) && is_array($chunk['metadata']) ? $chunk['metadata'] : [];�j� ]�u}�(j� �$chunkClass�j� K
j� }�(j� }�(j� MYj� Kuj� }�(j� MYj� Kuuj� }�(j� }�(j� MYj� Kuj� }�(j� MYj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �O$chunkClass = is_scalar($metadata['class']) ? (string) $metadata['class'] : '';�j� ]�u}�(j� �$chunkMethod�j� K
j� }�(j� }�(j� M]j� Kuj� }�(j� M]j� Kuuj� }�(j� }�(j� M]j� Kuj� }�(j� M]j� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �R$chunkMethod = is_scalar($metadata['method']) ? (string) $metadata['method'] : '';�j� ]�u}�(j� �$exampleLang�j� K
j� }�(j� }�(j� Mdj� Kuj� }�(j� Mdj� Kuuj� }�(j� }�(j� Mdj� Kuj� }�(j� Mdj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �T$exampleLang = is_scalar($example['language']) ? (string) $example['language'] : '';�j� ]�u}�(j� �$context�j� K
j� }�(j� }�(j� Mlj� Kuj� }�(j� Mlj� Kuuj� }�(j� }�(j� Mlj� Kuj� }�(j� Mlj� Kuuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �N$context = is_scalar($example['context']) ? (string) $example['context'] : '';�j� ]�u}�(j� �$lang�j� K
j� }�(j� }�(j� Mqj� Kuj� }�(j� Mqj� K
uuj� }�(j� }�(j� Mqj� Kuj� }�(j� Mqj� K
uuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �l$lang = isset($example['language']) && is_scalar($example['language']) ? (string) $example['language'] : '';�j� ]�u}�(j� �$code�j� K
j� }�(j� }�(j� Mrj� Kuj� }�(j� Mrj� K
uuj� }�(j� }�(j� Mrj� Kuj� }�(j� Mrj� K
uuj j6
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �`$code = isset($example['code']) && is_scalar($example['code']) ? (string) $example['code'] : '';�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j8
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X: /**
* Format a code example as markdown.
*
* @param array<string, mixed> $example
* @param int $number
* @param bool $includeContext
*/
private function formatCodeExample(array $example, int $number, bool $includeContext): string
{
$markdown = "### Example {$number}\n\n";
$chunk = isset($example['chunk']) && is_array($example['chunk']) ? $example['chunk'] : [];
// Add metadata
if (isset($chunk['sdk']) && '' !== $chunk['sdk']) {
$chunkSdk = is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : '';
$markdown .= "**SDK:** `{$chunkSdk}` \n";
}
// Access class and method from metadata
$metadata = isset($chunk['metadata']) && is_array($chunk['metadata']) ? $chunk['metadata'] : [];
if (isset($metadata['class']) && '' !== $metadata['class']) {
$chunkClass = is_scalar($metadata['class']) ? (string) $metadata['class'] : '';
$markdown .= sprintf('**Class:** `%s`', $chunkClass);
if (isset($metadata['method']) && '' !== $metadata['method']) {
$chunkMethod = is_scalar($metadata['method']) ? (string) $metadata['method'] : '';
$markdown .= sprintf(' **Method:** `%s`', $chunkMethod);
}
$markdown .= " \n";
}
if (isset($example['language']) && '' !== $example['language'] && 'unknown' !== $example['language']) {
$exampleLang = is_scalar($example['language']) ? (string) $example['language'] : '';
$markdown .= "**Language:** `{$exampleLang}` \n";
}
$markdown .= "\n";
// Add context if requested
if ($includeContext && isset($example['context']) && '' !== $example['context']) {
$context = is_scalar($example['context']) ? (string) $example['context'] : '';
$markdown .= "**Context:**\n> " . str_replace('[CODE]', '*(see code below)*', $context) . "\n\n";
}
// Add code
$lang = isset($example['language']) && is_scalar($example['language']) ? (string) $example['language'] : '';
$code = isset($example['code']) && is_scalar($example['code']) ? (string) $example['code'] : '';
$markdown .= "```{$lang}\n{$code}\n```\n";
return $markdown . "\n---\n\n";
}�u}�(j� �formatSearchResult�j� Kj� }�(j� }�(j� Mxj� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M~j� Kuj� }�(j� M~j� K'uuj ]�(}�(j� �$result�j� K
j� }�(j� }�(j� M~j� K(uj� }�(j� M~j� K5uuj� }�(j� }�(j� M~j� K.uj� }�(j� M~j� K5uuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �#array $result, int $number): string�j� ]�u}�(j� �$number�j� K
j� }�(j� }�(j� M~j� K7uj� }�(j� M~j� KBuuj� }�(j� }�(j� M~j� K;uj� }�(j� M~j� KBuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $number): string�j� ]�u}�(j� � $markdown�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �)$markdown = sprintf('### %d. ', $number);�j� ]�u}�(j� �$title�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$title = '';�j� ]�u}�(j� � $metadata�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j+ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �c$metadata = isset($result['metadata']) && is_array($result['metadata']) ? $result['metadata'] : [];�j� ]�u}�(j� �$sdkName�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j8 j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �D$sdkName = is_scalar($result['sdk']) ? (string) $result['sdk'] : '';�j� ]�u}�(j� �$sourceName�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jE j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �M$sourceName = is_scalar($result['source']) ? (string) $result['source'] : '';�j� ]�u}�(j� �$scoreValue�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jR j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �L$scoreValue = is_numeric($result['score']) ? (float) $result['score'] : 0.0;�j� ]�u}�(j� �$preview�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j_ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �L$preview = is_scalar($result['preview']) ? (string) $result['preview'] : '';�j� ]�u}�(j� �$preview�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jl j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �,$preview = substr($preview, 0, 497) . '...';�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jy j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �`$sdk = isset($result['sdk']) && is_scalar($result['sdk']) ? (string) $result['sdk'] : 'unknown';�j� ]�u}�(j� �$id�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �n$id = isset($result['chunk_id']) && is_scalar($result['chunk_id']) ? (string) $result['chunk_id'] : 'unknown';�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X�
/**
* Format a search result as markdown.
*
* @param array<string, mixed> $result
* @param int $number
*/
private function formatSearchResult(array $result, int $number): string
{
$markdown = sprintf('### %d. ', $number);
// Build title based on available metadata
$title = '';
$metadata = isset($result['metadata']) && is_array($result['metadata']) ? $result['metadata'] : [];
if (isset($metadata['class']) && '' !== $metadata['class']) {
$title .= is_scalar($metadata['class']) ? (string) $metadata['class'] : '';
if (isset($metadata['method']) && '' !== $metadata['method']) {
$title .= '::' . (is_scalar($metadata['method']) ? (string) $metadata['method'] : '');
}
} elseif (isset($metadata['section']) && '' !== $metadata['section']) {
$title .= is_scalar($metadata['section']) ? (string) $metadata['section'] : '';
} else {
$title .= 'Documentation Chunk';
}
$markdown .= $title . "\n\n";
// Add metadata
if (isset($result['sdk']) && '' !== $result['sdk']) {
$sdkName = is_scalar($result['sdk']) ? (string) $result['sdk'] : '';
$markdown .= "**SDK:** `{$sdkName}` \n";
}
if (isset($result['source']) && '' !== $result['source']) {
$sourceName = is_scalar($result['source']) ? (string) $result['source'] : '';
$markdown .= "**Source:** `{$sourceName}` \n";
}
if (isset($result['score']) && 0.0 !== $result['score']) {
$scoreValue = is_numeric($result['score']) ? (float) $result['score'] : 0.0;
$markdown .= '**Relevance:** ' . (string) round($scoreValue * 100.0) . "% \n";
}
$markdown .= "\n";
// Add preview
if (isset($result['preview']) && '' !== $result['preview']) {
$preview = is_scalar($result['preview']) ? (string) $result['preview'] : '';
// Limit preview length
if (500 < strlen($preview)) {
$preview = substr($preview, 0, 497) . '...';
}
$markdown .= "**Preview:**\n```\n{$preview}\n```\n";
}
// Add navigation
if (isset($result['chunk_id']) && '' !== $result['chunk_id']) {
$sdk = isset($result['sdk']) && is_scalar($result['sdk']) ? (string) $result['sdk'] : 'unknown';
$id = isset($result['chunk_id']) && is_scalar($result['chunk_id']) ? (string) $result['chunk_id'] : 'unknown';
$markdown .= "\n**Reference:** `{$sdk}::{$id}`\n";
}
return $markdown . "\n---\n\n";
}�u}�(j� �formatSimilarResult�j� Kj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K(uuj ]�(}�(j� �$chunk�j� K
j� }�(j� }�(j� M�j� K)uj� }�(j� M�j� K5uuj� }�(j� }�(j� M�j� K/uj� }�(j� M�j� K5uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"array $chunk, int $number): string�j� ]�u}�(j� �$number�j� K
j� }�(j� }�(j� M�j� K7uj� }�(j� M�j� KBuuj� }�(j� }�(j� M�j� K;uj� }�(j� M�j� KBuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �int $number): string�j� ]�u}�(j� � $markdown�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �)$markdown = sprintf('### %d. ', $number);�j� ]�u}�(j� �$title�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$title = '';�j� ]�u}�(j� � $metadata�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �`$metadata = isset($chunk['metadata']) && is_array($chunk['metadata']) ? $chunk['metadata'] : [];�j� ]�u}�(j� �$chunkSdkValue�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �H$chunkSdkValue = is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : '';�j� ]�u}�(j� � $simScore�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �R$simScore = is_numeric($chunk['similarity']) ? (float) $chunk['similarity'] : 0.0;�j� ]�u}�(j� �$sourceValue�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �L$sourceValue = is_scalar($chunk['source']) ? (string) $chunk['source'] : '';�j� ]�u}�(j� �$preview�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �J$preview = is_scalar($chunk['content']) ? (string) $chunk['content'] : '';�j� ]�u}�(j� �$preview�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �,$preview = substr($preview, 0, 797) . '...';�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j" j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �]$sdk = isset($chunk['sdk']) && is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : 'unknown';�j� ]�u}�(j� �$id�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j/ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �k$id = isset($chunk['chunk_id']) && is_scalar($chunk['chunk_id']) ? (string) $chunk['chunk_id'] : 'unknown';�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X�
/**
* Format a similar documentation result as markdown.
*
* @param array<string, mixed> $chunk
* @param int $number
*/
private function formatSimilarResult(array $chunk, int $number): string
{
$markdown = sprintf('### %d. ', $number);
// Build title
$title = '';
$metadata = isset($chunk['metadata']) && is_array($chunk['metadata']) ? $chunk['metadata'] : [];
if (isset($metadata['class']) && '' !== $metadata['class']) {
$title .= is_scalar($metadata['class']) ? (string) $metadata['class'] : '';
if (isset($metadata['method']) && '' !== $metadata['method']) {
$title .= '::' . (is_scalar($metadata['method']) ? (string) $metadata['method'] : '');
}
} elseif (isset($metadata['section']) && '' !== $metadata['section']) {
$title .= is_scalar($metadata['section']) ? (string) $metadata['section'] : '';
} else {
$title .= 'Related Documentation';
}
$markdown .= $title . "\n\n";
// Add metadata
if (isset($chunk['sdk']) && '' !== $chunk['sdk']) {
$chunkSdkValue = is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : '';
$markdown .= "**SDK:** `{$chunkSdkValue}` \n";
}
if (isset($chunk['similarity']) && 0.0 !== $chunk['similarity']) {
$simScore = is_numeric($chunk['similarity']) ? (float) $chunk['similarity'] : 0.0;
$markdown .= '**Similarity Score:** ' . (string) round($simScore * 100.0) . "% \n";
}
if (isset($chunk['source']) && '' !== $chunk['source']) {
$sourceValue = is_scalar($chunk['source']) ? (string) $chunk['source'] : '';
$markdown .= "**Source:** `{$sourceValue}` \n";
}
$markdown .= "\n";
// Add content preview
if (isset($chunk['content']) && '' !== $chunk['content']) {
$preview = is_scalar($chunk['content']) ? (string) $chunk['content'] : '';
// Limit preview length
if (800 < strlen($preview)) {
$preview = substr($preview, 0, 797) . '...';
}
$markdown .= "**Content:**\n\n" . $preview . "\n";
}
// Add reference
if (isset($chunk['chunk_id']) && '' !== $chunk['chunk_id']) {
$sdk = isset($chunk['sdk']) && is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : 'unknown';
$id = isset($chunk['chunk_id']) && is_scalar($chunk['chunk_id']) ? (string) $chunk['chunk_id'] : 'unknown';
$markdown .= "\n**Reference:** `{$sdk}::{$id}`\n";
}
return $markdown . "\n---\n\n";
}�u}�(j� �getChunkContent�j� Kj� }�(j� }�(j� M�j� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� K$uuj ]�(}�(j� �$chunkId�j� K
j� }�(j� }�(j� Mj� K%uj� }�(j� Mj� K4uuj� }�(j� }�(j� Mj� K,uj� }�(j� Mj� K4uuj j> j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jI j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �3string $chunkId, DocumentationIndex $index): string�j� ]�u}�(j� �$index�j� K
j� }�(j� }�(j� Mj� K6uj� }�(j� Mj� KOuuj� }�(j� }�(j� Mj� KIuj� }�(j� Mj� KOuuj j> j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jV j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"DocumentationIndex $index): string�j� ]�u}�(j� �$chunk�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj j> j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jc j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �($chunk = $index->getChunkById($chunkId);�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j@ j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X /**
* Get the full content of a chunk by its ID.
*
* @param string $chunkId
* @param DocumentationIndex $index
*/
private function getChunkContent(string $chunkId, DocumentationIndex $index): string
{
// For now, we'll use the chunk ID to get content
// In a real implementation, we'd fetch this from the index
$chunk = $index->getChunkById($chunkId);
if (null === $chunk) {
return '';
}
return $chunk['content'] ?? '';
}�u}�(j� �mapLanguageToSdk�j� Kj� }�(j� }�(j� Mj� Kuj� }�(j� M'j� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� K%uuj ]�(}�(j� � $language�j� K
j� }�(j� }�(j� Mj� K&uj� }�(j� Mj� K7uuj� }�(j� }�(j� Mj� K.uj� }�(j� Mj� K7uuj jr j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j} j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $language): ?string�j� ]�u}�(j� �$mapping�j� K
j� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj� }�(j� }�(j� Mj� Kuj� }�(j� Mj� Kuuj jr j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$mapping = [�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jt j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X /**
* Map programming language to SDK.
*
* @param string|null $language
*/
private function mapLanguageToSdk(?string $language): ?string
{
if (null === $language) {
return null;
}
$mapping = [
'php' => 'php',
'go' => 'go',
'python' => 'python',
'java' => 'java',
'csharp' => 'dotnet',
'javascript' => 'js',
'typescript' => 'js',
];
return $mapping[$language] ?? null;
}�u}�(j� �
performSearch�j� Kj� }�(j� }�(j� M)j� Kuj� }�(j� M=j� Kuuj� }�(j� }�(j� M5j� Kuj� }�(j� M5j� K"uuj ]�(}�(j� �$index�j� K
j� }�(j� }�(j� M5j� K#uj� }�(j� M5j� K<uuj� }�(j� }�(j� M5j� K6uj� }�(j� M5j� K<uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �RDocumentationIndex $index, string $query, ?string $sdk, string $searchType): array�j� ]�u}�(j� �$query�j� K
j� }�(j� }�(j� M5j� K>uj� }�(j� M5j� KKuuj� }�(j� }�(j� M5j� KEuj� }�(j� M5j� KKuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �7string $query, ?string $sdk, string $searchType): array�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� M5j� KMuj� }�(j� M5j� KYuuj� }�(j� }�(j� M5j� KUuj� }�(j� M5j� KYuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �(?string $sdk, string $searchType): array�j� ]�u}�(j� �$searchType�j� K
j� }�(j� }�(j� M5j� K[uj� }�(j� M5j� Kmuuj� }�(j� }�(j� M5j� Kbuj� }�(j� M5j� Kmuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �string $searchType): array�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� X
/**
* Perform search based on search type.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
* @param string $searchType
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function performSearch(DocumentationIndex $index, string $query, ?string $sdk, string $searchType): array
{
return match ($searchType) {
'class' => $this->searchForClasses($index, $query, $sdk),
'method' => $this->searchForMethods($index, $query, $sdk),
'section' => $this->searchForSections($index, $query, $sdk),
default => $index->searchChunks($query, $sdk),
};
}�u}�(j� �searchForClasses�j� Kj� }�(j� }�(j� M?j� Kuj� }�(j� MXj� Kuuj� }�(j� }�(j� MJj� Kuj� }�(j� MJj� K%uuj ]�(}�(j� �$index�j� K
j� }�(j� }�(j� MJj� K&uj� }�(j� MJj� K?uuj� }�(j� }�(j� MJj� K9uj� }�(j� MJj� K?uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �>DocumentationIndex $index, string $query, ?string $sdk): array�j� ]�u}�(j� �$query�j� K
j� }�(j� }�(j� MJj� KAuj� }�(j� MJj� KNuuj� }�(j� }�(j� MJj� KHuj� }�(j� MJj� KNuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �#string $query, ?string $sdk): array�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� MJj� KPuj� }�(j� MJj� K\uuj� }�(j� }�(j� MJj� KXuj� }�(j� MJj� K\uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $sdk): array�j� ]�u}�(j� �
$allChunks�j� K
j� }�(j� }�(j� MLj� Kuj� }�(j� MLj� Kuuj� }�(j� }�(j� MLj� Kuj� }�(j� MLj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �0$allChunks = $index->searchChunks($query, $sdk);�j� ]�u}�(j� �
$classResults�j� K
j� }�(j� }�(j� MMj� Kuj� }�(j� MMj� Kuuj� }�(j� }�(j� MMj� Kuj� }�(j� MMj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$classResults = [];�j� ]�u}�(j� � $allChunk�j� K
j� }�(j� }�(j� MOj� Kuj� }�(j� MOj� K(uuj� }�(j� }�(j� MOj� Kuj� }�(j� MOj� K(uuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j&
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$allChunk) {�j� ]�u}�(j� � $metadata�j� K
j� }�(j� }�(j� MPj� Kuj� }�(j� MPj� Kuuj� }�(j� }�(j� MPj� Kuj� }�(j� MPj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j3
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php��L j� j� uj� �"$metadata = $allChunk['metadata'];�j� ]�u}�(j� �
$classResults�j� K
j� }�(j� }�(j� MSj� Kuj� }�(j� MSj� Kuuj� }�(j� }�(j� MSj� Kuj� }�(j� MSj� Kuuj j� j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j@
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$classResults[] = $allChunk;�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� XE /**
* Search specifically for classes.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function searchForClasses(DocumentationIndex $index, string $query, ?string $sdk): array
{
$allChunks = $index->searchChunks($query, $sdk);
$classResults = [];
foreach ($allChunks as $allChunk) {
$metadata = $allChunk['metadata'];
if (isset($metadata['class']) && '' !== $metadata['class'] && is_scalar($metadata['class']) && false !== stripos((string) $metadata['class'], $query)) {
$classResults[] = $allChunk;
}
}
return $classResults;
}�u}�(j� �searchForMethods�j� Kj� }�(j� }�(j� MZj� Kuj� }�(j� Msj� Kuuj� }�(j� }�(j� Mej� Kuj� }�(j� Mej� K%uuj ]�(}�(j� �$index�j� K
j� }�(j� }�(j� Mej� K&uj� }�(j� Mej� K?uuj� }�(j� }�(j� Mej� K9uj� }�(j� Mej� K?uuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jZ
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �>DocumentationIndex $index, string $query, ?string $sdk): array�j� ]�u}�(j� �$query�j� K
j� }�(j� }�(j� Mej� KAuj� }�(j� Mej� KNuuj� }�(j� }�(j� Mej� KHuj� }�(j� Mej� KNuuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jg
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �#string $query, ?string $sdk): array�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� Mej� KPuj� }�(j� Mej� K\uuj� }�(j� }�(j� Mej� KXuj� }�(j� Mej� K\uuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jt
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $sdk): array�j� ]�u}�(j� �
$allChunks�j� K
j� }�(j� }�(j� Mgj� Kuj� }�(j� Mgj� Kuuj� }�(j� }�(j� Mgj� Kuj� }�(j� Mgj� Kuuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �0$allChunks = $index->searchChunks($query, $sdk);�j� ]�u}�(j� �$methodResults�j� K
j� }�(j� }�(j� Mhj� Kuj� }�(j� Mhj� Kuuj� }�(j� }�(j� Mhj� Kuj� }�(j� Mhj� Kuuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$methodResults = [];�j� ]�u}�(j� � $allChunk�j� K
j� }�(j� }�(j� Mjj� Kuj� }�(j� Mjj� K(uuj� }�(j� }�(j� Mjj� Kuj� }�(j� Mjj� K(uuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$allChunk) {�j� ]�u}�(j� � $metadata�j� K
j� }�(j� }�(j� Mkj� Kuj� }�(j� Mkj� Kuuj� }�(j� }�(j� Mkj� Kuj� }�(j� Mkj� Kuuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"$metadata = $allChunk['metadata'];�j� ]�u}�(j� �$methodResults�j� K
j� }�(j� }�(j� Mnj� Kuj� }�(j� Mnj� Kuuj� }�(j� }�(j� Mnj� Kuj� }�(j� Mnj� Kuuj jO
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$methodResults[] = $allChunk;�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� jQ
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� XL /**
* Search specifically for methods.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function searchForMethods(DocumentationIndex $index, string $query, ?string $sdk): array
{
$allChunks = $index->searchChunks($query, $sdk);
$methodResults = [];
foreach ($allChunks as $allChunk) {
$metadata = $allChunk['metadata'];
if (isset($metadata['method']) && '' !== $metadata['method'] && is_scalar($metadata['method']) && false !== stripos((string) $metadata['method'], $query)) {
$methodResults[] = $allChunk;
}
}
return $methodResults;
}�u}�(j� �searchForSections�j� Kj� }�(j� }�(j� Muj� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K&uuj ]�(}�(j� �$index�j� K
j� }�(j� }�(j� M�j� K'uj� }�(j� M�j� K@uuj� }�(j� }�(j� M�j� K:uj� }�(j� M�j� K@uuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �>DocumentationIndex $index, string $query, ?string $sdk): array�j� ]�u}�(j� �$query�j� K
j� }�(j� }�(j� M�j� KBuj� }�(j� M�j� KOuuj� }�(j� }�(j� M�j� KIuj� }�(j� M�j� KOuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �#string $query, ?string $sdk): array�j� ]�u}�(j� �$sdk�j� K
j� }�(j� }�(j� M�j� KQuj� }�(j� M�j� K]uuj� }�(j� }�(j� M�j� KYuj� }�(j� M�j� K]uuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �?string $sdk): array�j� ]�u}�(j� �
$allChunks�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �0$allChunks = $index->searchChunks($query, $sdk);�j� ]�u}�(j� �$sectionResults�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$sectionResults = [];�j� ]�u}�(j� � $allChunk�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K(uuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� K(uuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$allChunk) {�j� ]�u}�(j� � $metadata�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �"$metadata = $allChunk['metadata'];�j� ]�u}�(j� �$sectionResults�j� K
j� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj� }�(j� }�(j� M�j� Kuj� }�(j� M�j� Kuuj j�
j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j* j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� �$sectionResults[] = $allChunk;�j� ]�uej j j� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j�
j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� XU /**
* Search specifically for sections.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function searchForSections(DocumentationIndex $index, string $query, ?string $sdk): array
{
$allChunks = $index->searchChunks($query, $sdk);
$sectionResults = [];
foreach ($allChunks as $allChunk) {
$metadata = $allChunk['metadata'];
if (isset($metadata['section']) && '' !== $metadata['section'] && is_scalar($metadata['section']) && false !== stripos((string) $metadata['section'], $query)) {
$sectionResults[] = $allChunk;
}
}
return $sectionResults;
}�uej� }�(j� �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j j� �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�j� j� uj� Xc� final readonly class DocumentationTools extends AbstractTools
{
public function __construct(
/** @phpstan-ignore property.onlyWritten */
private ClientInterface $client,
) {
}
/**
* Find documentation similar to provided content.
*
* @param string $content Reference content to find similar documentation
* @param string|null $sdk Limit search to specific SDK
* @param float $similarity_threshold Minimum similarity score (0.0-1.0, default: 0.5)
* @param int $limit Maximum number of results (default: 5)
*
* @throws RuntimeException If documentation index initialization fails
*
* @return string Markdown-formatted related documentation
*/
#[McpTool(name: 'find_similar_documentation')]
public function findSimilarDocumentation(
string $content,
?string $sdk = null,
float $similarity_threshold = 0.5,
int $limit = 5,
): string {
if ('' === trim($content)) {
return '❌ Content cannot be empty';
}
if (0.0 > $similarity_threshold || 1.0 < $similarity_threshold) {
return '❌ Similarity threshold must be between 0.0 and 1.0';
}
if (1 > $limit || 20 < $limit) {
return '❌ Limit must be between 1 and 20';
}
$validSdks = ['php', 'go', 'python', 'java', 'dotnet', 'js', 'laravel', null];
if (! in_array($sdk, $validSdks, true)) {
return '❌ Invalid SDK. Must be one of: php, go, python, java, dotnet, js, laravel';
}
$index = DocumentationIndexSingleton::getInstance();
if (! $index->isInitialized()) {
$index->initialize();
}
// Extract key terms from content for similarity matching
$keyTerms = $this->extractKeyTerms($content);
if ([] === $keyTerms) {
return '❌ Could not extract meaningful terms from the provided content';
}
// Search for similar content using key terms
/** @var array<string, array{chunk_id: string, sdk: string, score: float, preview: string, metadata: array<mixed>, similarity?: float, content?: string}> $similarChunks */
$similarChunks = [];
foreach ($keyTerms as $keyTerm) {
$chunks = $index->searchChunks($keyTerm, $sdk, $limit * 2);
foreach ($chunks as $chunk) {
// Get content from the chunk to calculate similarity
// We need to get the actual content - the preview is just a snippet
$chunkContent = $this->getChunkContent($chunk['chunk_id'], $index);
$similarity = $this->calculateSimilarity($content, $chunkContent);
if ($similarity >= $similarity_threshold) {
// Add similarity and content to the chunk
$chunkWithSimilarity = $chunk;
$chunkWithSimilarity['similarity'] = $similarity;
$chunkWithSimilarity['content'] = $chunkContent;
$chunkKey = $chunk['sdk'] . '::' . $chunk['chunk_id'];
if (! isset($similarChunks[$chunkKey])) {
$similarChunks[$chunkKey] = $chunkWithSimilarity;
} elseif (isset($similarChunks[$chunkKey]['similarity'])) {
$existingSim = $similarChunks[$chunkKey]['similarity'];
if ($existingSim < $similarity) {
$similarChunks[$chunkKey] = $chunkWithSimilarity;
}
}
}
}
}
// Sort by similarity score
usort($similarChunks, static function (array $a, array $b): int {
// Since we know similarity is added above, we can safely access it
$aSimilarity = isset($a['similarity']) && is_numeric($a['similarity']) ? $a['similarity'] : 0.0;
$bSimilarity = isset($b['similarity']) && is_numeric($b['similarity']) ? $b['similarity'] : 0.0;
return $bSimilarity <=> $aSimilarity;
});
// Apply limit
$similarChunks = array_slice($similarChunks, 0, $limit);
if ([] === $similarChunks) {
return "## Similar Documentation\n\nNo similar documentation found (threshold: {$similarity_threshold})" .
(null !== $sdk ? ' in SDK: ' . $sdk : '') .
"\n\nTry:\n- Lowering the similarity threshold\n- Providing more specific content\n- Removing SDK filter for broader results";
}
// Build markdown response
$markdown = "## Similar Documentation\n\n";
$markdown .= sprintf('**Similarity Threshold:** %s%s', $similarity_threshold, PHP_EOL);
if (null !== $sdk) {
$markdown .= sprintf('**SDK Filter:** %s%s', $sdk, PHP_EOL);
}
$markdown .= '**Found:** ' . count($similarChunks) . " similar document(s)\n\n";
$markdown .= "---\n\n";
foreach ($similarChunks as $chunkIndex => $chunk) {
$markdown .= $this->formatSimilarResult($chunk, $chunkIndex + 1);
}
return $markdown;
}
/**
* Search for code examples in documentation.
*
* @param string $query Code pattern or concept to find
* @param string|null $language Programming language filter (php, go, python, java, csharp, javascript, typescript)
* @param bool $include_context Include surrounding explanatory context
* @param int $limit Maximum number of examples to return (default: 5)
* @param int $offset Pagination offset for results (default: 0)
*
* @throws RuntimeException If documentation index initialization fails
*
* @return string Markdown-formatted code examples with descriptions
*/
#[McpTool(name: 'search_code_examples')]
public function searchCodeExamples(
string $query,
?string $language = null,
bool $include_context = true,
int $limit = 5,
int $offset = 0,
): string {
if ('' === trim($query)) {
return '❌ Search query cannot be empty';
}
if (1 > $limit || 20 < $limit) {
return '❌ Limit must be between 1 and 20';
}
if (0 > $offset) {
return '❌ Offset cannot be negative';
}
$validLanguages = ['php', 'go', 'python', 'java', 'csharp', 'javascript', 'typescript', null];
if (! in_array($language, $validLanguages, true)) {
return '❌ Invalid language. Must be one of: php, go, python, java, csharp, javascript, typescript';
}
$index = DocumentationIndexSingleton::getInstance();
if (! $index->isInitialized()) {
$index->initialize();
}
// Map language to SDK if applicable
$sdk = $this->mapLanguageToSdk($language);
// Search for code-related chunks
$allChunks = $index->searchChunks($query, $sdk);
$codeExamples = [];
foreach ($allChunks as $allChunk) {
// Get the full content for this chunk
$chunkContent = $this->getChunkContent($allChunk['chunk_id'], $index);
$chunkWithContent = $allChunk;
$chunkWithContent['content'] = $chunkContent;
$examples = $this->extractCodeFromChunk($chunkWithContent, $language);
foreach ($examples as $example) {
$example['chunk'] = $allChunk;
$codeExamples[] = $example;
}
}
$totalExamples = count($codeExamples);
if (0 === $totalExamples) {
return "## Code Examples
No code examples found for: **{$query}**" .
(null !== $language ? sprintf(' (language: %s)', $language) : '') .
"\n\nTry:\n- Searching for specific method or class names\n- Using OpenFGA terminology (e.g., 'check', 'expand', 'tuples')\n- Removing language filter for broader results";
}
// Apply pagination
$paginatedExamples = array_slice($codeExamples, $offset, $limit);
$currentPage = (int) floor($offset / $limit) + 1;
$totalPages = (int) ceil($totalExamples / $limit);
// Build markdown response
$markdown = "## Code Examples\n\n";
$markdown .= "**Search:** `{$query}`\n";
if (null !== $language) {
$markdown .= sprintf('**Language:** %s%s', $language, PHP_EOL);
}
$markdown .= '**Results:** Showing ' . ($offset + 1) . '-' . min($offset + $limit, $totalExamples) . " of {$totalExamples} examples\n\n";
$markdown .= "---\n\n";
foreach ($paginatedExamples as $exampleIndex => $example) {
$exampleNumber = $offset + $exampleIndex + 1;
$markdown .= $this->formatCodeExample($example, $exampleNumber, $include_context);
}
// Add pagination info
if (1 < $totalPages) {
$markdown .= "\n---\n\n### Pagination\n\n";
if (1 < $currentPage) {
$prevOffset = max(0, $offset - $limit);
$markdown .= sprintf('- **Previous page:** Use offset=%d%s', $prevOffset, PHP_EOL);
}
if ($currentPage < $totalPages) {
$nextOffset = $offset + $limit;
$markdown .= sprintf('- **Next page:** Use offset=%d%s', $nextOffset, PHP_EOL);
}
}
return $markdown;
}
/**
* Advanced documentation search with filtering and pagination.
*
* @param string $query Search query to find in documentation
* @param string|null $sdk Filter by specific SDK (php, go, python, java, dotnet, js, laravel)
* @param string $search_type Type of search: content (default), class, method, or section
* @param int $limit Maximum number of results to return (default: 10)
* @param int $offset Pagination offset for results (default: 0)
*
* @throws RuntimeException If documentation index initialization fails
*
* @return string Markdown-formatted search results with pagination metadata
*/
#[McpTool(name: 'search_documentation')]
public function searchDocumentation(
string $query,
?string $sdk = null,
string $search_type = 'content',
int $limit = 10,
int $offset = 0,
): string {
if ('' === trim($query)) {
return '❌ Search query cannot be empty';
}
if (1 > $limit || 50 < $limit) {
return '❌ Limit must be between 1 and 50';
}
if (0 > $offset) {
return '❌ Offset cannot be negative';
}
$validSearchTypes = ['content', 'class', 'method', 'section'];
if (! in_array($search_type, $validSearchTypes, true)) {
return '❌ Invalid search_type. Must be one of: ' . implode(', ', $validSearchTypes);
}
$validSdks = ['php', 'go', 'python', 'java', 'dotnet', 'js', 'laravel', null];
if (! in_array($sdk, $validSdks, true)) {
return '❌ Invalid SDK. Must be one of: php, go, python, java, dotnet, js, laravel';
}
$index = DocumentationIndexSingleton::getInstance();
if (! $index->isInitialized()) {
$index->initialize();
}
// Get all results first for total count
$allResults = $this->performSearch($index, $query, $sdk, $search_type);
$totalResults = count($allResults);
if (0 === $totalResults) {
return "## Documentation Search Results
No results found for query: **{$query}**" .
(null !== $sdk ? sprintf(' (filtered by SDK: %s)', $sdk) : '') .
"\n\nTry:\n- Using different keywords\n- Checking spelling\n- Using broader search terms";
}
// Apply pagination
$paginatedResults = array_slice($allResults, $offset, $limit);
$currentPage = (int) floor($offset / $limit) + 1;
$totalPages = (int) ceil($totalResults / $limit);
// Build markdown response
$markdown = "## Documentation Search Results\n\n";
$markdown .= "**Query:** `{$query}`\n";
if (null !== $sdk) {
$markdown .= sprintf('**SDK Filter:** %s%s', $sdk, PHP_EOL);
}
$markdown .= sprintf('**Search Type:** %s%s', $search_type, PHP_EOL);
$markdown .= '**Results:** Showing ' . ($offset + 1) . '-' . min($offset + $limit, $totalResults) . " of {$totalResults} total results\n";
$markdown .= "**Page:** {$currentPage} of {$totalPages}\n\n";
$markdown .= "---\n\n";
foreach ($paginatedResults as $resultIndex => $result) {
$resultNumber = $offset + (int) $resultIndex + 1;
$markdown .= $this->formatSearchResult($result, $resultNumber);
}
// Add pagination info
if (1 < $totalPages) {
$markdown .= "\n---\n\n### Pagination\n\n";
if (1 < $currentPage) {
$prevOffset = max(0, $offset - $limit);
$markdown .= sprintf('- **Previous page:** Use offset=%d%s', $prevOffset, PHP_EOL);
}
if ($currentPage < $totalPages) {
$nextOffset = $offset + $limit;
$markdown .= sprintf('- **Next page:** Use offset=%d%s', $nextOffset, PHP_EOL);
}
}
return $markdown;
}
/**
* Calculate similarity between two pieces of content.
*
* @param string $content1
* @param string $content2
* @return float Similarity score between 0 and 1
*/
private function calculateSimilarity(string $content1, string $content2): float
{
if ('' === $content1 || '' === $content2) {
return 0.0;
}
// Extract terms from both contents
$terms1 = $this->extractKeyTerms($content1);
$terms2 = $this->extractKeyTerms($content2);
if ([] === $terms1 || [] === $terms2) {
return 0.0;
}
// Calculate Jaccard similarity
$intersection = count(array_intersect($terms1, $terms2));
$union = count(array_unique(array_merge($terms1, $terms2)));
// Union will always be at least 1 since we checked both term arrays are non-empty
$jaccard = (float) ($intersection / $union);
// Also check for exact phrase matches for higher similarity
$phrases = [
'authorization model',
'permission check',
'tuple creation',
'relationship tuples',
'access control',
'openfga',
];
$phraseBonus = 0.0;
foreach ($phrases as $phrase) {
if (false !== stripos($content1, $phrase) && false !== stripos($content2, $phrase)) {
$phraseBonus += 0.1;
}
}
// Combine scores (cap at 1.0)
return min(1.0, $jaccard + $phraseBonus);
}
/**
* Extract code examples from a chunk.
*
* @param array<string, mixed> $chunk
* @param string|null $language
* @return array<array<string, mixed>>
*/
private function extractCodeFromChunk(array $chunk, ?string $language): array
{
$content = isset($chunk['content']) && is_scalar($chunk['content']) ? (string) $chunk['content'] : '';
$examples = [];
// Match code blocks with optional language specification
$pattern = '/```(\w+)?\n(.*?)\n```/s';
$result = preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);
if (false !== $result && 0 < $result) {
foreach ($matches as $match) {
// When preg_match_all succeeds with PREG_SET_ORDER, capture groups exist
// Optional groups will be empty strings if they don't match
/** @var array{0: string, 1: string, 2: string} $match */
$codeLang = $match[1];
$codeContent = $match[2];
// Filter by language if specified
if (null !== $language) {
$langMatch = false;
switch ($language) {
case 'php':
$langMatch = 'php' === $codeLang || false !== stripos($codeContent, '<?php');
break;
case 'go':
$langMatch = 'go' === $codeLang || false !== stripos($codeContent, 'func ');
break;
case 'python':
$langMatch = 'python' === $codeLang || 'py' === $codeLang || false !== stripos($codeContent, 'def ');
break;
case 'java':
$langMatch = 'java' === $codeLang || false !== stripos($codeContent, 'public class');
break;
case 'csharp':
$langMatch = 'csharp' === $codeLang || 'cs' === $codeLang || false !== stripos($codeContent, 'using ');
break;
case 'javascript':
case 'typescript':
$langMatch = in_array($codeLang, ['javascript', 'js', 'typescript', 'ts'], true);
break;
}
if (! $langMatch) {
continue;
}
}
$examples[] = [
'language' => '' !== $codeLang ? $codeLang : 'unknown',
'code' => $codeContent,
'context' => $this->extractContext($content, $match[0]),
];
}
}
return $examples;
}
/**
* Extract context around code.
*
* @param string $content
* @param string $codeBlock
*/
private function extractContext(string $content, string $codeBlock): string
{
$position = strpos($content, $codeBlock);
if (false === $position) {
return '';
}
// Get text before the code block (up to 200 chars)
$beforeStart = max(0, $position - 200);
$beforeText = substr($content, $beforeStart, $position - $beforeStart);
// Get text after the code block (up to 200 chars)
$afterStart = $position + strlen($codeBlock);
$afterText = substr($content, $afterStart, 200);
// Clean up and combine
$beforeText = trim(preg_replace('/\s+/', ' ', $beforeText) ?? '');
$afterText = trim(preg_replace('/\s+/', ' ', $afterText) ?? '');
$context = '';
if ('' !== $beforeText) {
$context .= '...' . $beforeText;
}
$context .= ' [CODE] ';
if ('' !== $afterText) {
$context .= $afterText . '...';
}
return trim($context);
}
/**
* Extract key terms from content for similarity matching.
*
* @param string $content
* @return array<string>
*/
private function extractKeyTerms(string $content): array
{
// Remove code blocks and special characters
$cleanContent = preg_replace('/```[\s\S]*?```/', '', $content);
$cleanContent ??= '';
$cleanContent = preg_replace('/[^a-zA-Z0-9\s]/', ' ', $cleanContent);
$cleanContent ??= '';
// Extract words
$words = preg_split('/\s+/', strtolower($cleanContent));
$words = false !== $words ? $words : [];
// Filter out common words and short words
$stopWords = ['the', 'is', 'at', 'which', 'on', 'and', 'a', 'an', 'as', 'are', 'was', 'were', 'been', 'be', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'must', 'can', 'this', 'that', 'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they', 'what', 'which', 'who', 'when', 'where', 'why', 'how', 'all', 'each', 'every', 'both', 'few', 'more', 'most', 'other', 'some', 'such', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just', 'in', 'of', 'to', 'for', 'with', 'from', 'up', 'out', 'if', 'about', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between', 'under', 'again', 'further', 'then', 'once'];
$termCounts = [];
foreach ($words as $word) {
if (2 < strlen($word) && ! in_array($word, $stopWords, true)) {
if (! isset($termCounts[$word])) {
$termCounts[$word] = 0;
}
++$termCounts[$word];
}
}
// Sort by frequency and take top terms
arsort($termCounts);
$keyTerms = array_keys(array_slice($termCounts, 0, 10));
// Add OpenFGA-specific terms if present
$openfgaTerms = ['openfga', 'authorization', 'permission', 'tuple', 'relation', 'check', 'expand', 'store', 'model', 'user', 'object'];
foreach ($openfgaTerms as $openfgaTerm) {
if (false !== stripos($content, $openfgaTerm) && ! in_array($openfgaTerm, $keyTerms, true)) {
$keyTerms[] = $openfgaTerm;
}
}
return array_slice($keyTerms, 0, 15);
}
/**
* Format a code example as markdown.
*
* @param array<string, mixed> $example
* @param int $number
* @param bool $includeContext
*/
private function formatCodeExample(array $example, int $number, bool $includeContext): string
{
$markdown = "### Example {$number}\n\n";
$chunk = isset($example['chunk']) && is_array($example['chunk']) ? $example['chunk'] : [];
// Add metadata
if (isset($chunk['sdk']) && '' !== $chunk['sdk']) {
$chunkSdk = is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : '';
$markdown .= "**SDK:** `{$chunkSdk}` \n";
}
// Access class and method from metadata
$metadata = isset($chunk['metadata']) && is_array($chunk['metadata']) ? $chunk['metadata'] : [];
if (isset($metadata['class']) && '' !== $metadata['class']) {
$chunkClass = is_scalar($metadata['class']) ? (string) $metadata['class'] : '';
$markdown .= sprintf('**Class:** `%s`', $chunkClass);
if (isset($metadata['method']) && '' !== $metadata['method']) {
$chunkMethod = is_scalar($metadata['method']) ? (string) $metadata['method'] : '';
$markdown .= sprintf(' **Method:** `%s`', $chunkMethod);
}
$markdown .= " \n";
}
if (isset($example['language']) && '' !== $example['language'] && 'unknown' !== $example['language']) {
$exampleLang = is_scalar($example['language']) ? (string) $example['language'] : '';
$markdown .= "**Language:** `{$exampleLang}` \n";
}
$markdown .= "\n";
// Add context if requested
if ($includeContext && isset($example['context']) && '' !== $example['context']) {
$context = is_scalar($example['context']) ? (string) $example['context'] : '';
$markdown .= "**Context:**\n> " . str_replace('[CODE]', '*(see code below)*', $context) . "\n\n";
}
// Add code
$lang = isset($example['language']) && is_scalar($example['language']) ? (string) $example['language'] : '';
$code = isset($example['code']) && is_scalar($example['code']) ? (string) $example['code'] : '';
$markdown .= "```{$lang}\n{$code}\n```\n";
return $markdown . "\n---\n\n";
}
/**
* Format a search result as markdown.
*
* @param array<string, mixed> $result
* @param int $number
*/
private function formatSearchResult(array $result, int $number): string
{
$markdown = sprintf('### %d. ', $number);
// Build title based on available metadata
$title = '';
$metadata = isset($result['metadata']) && is_array($result['metadata']) ? $result['metadata'] : [];
if (isset($metadata['class']) && '' !== $metadata['class']) {
$title .= is_scalar($metadata['class']) ? (string) $metadata['class'] : '';
if (isset($metadata['method']) && '' !== $metadata['method']) {
$title .= '::' . (is_scalar($metadata['method']) ? (string) $metadata['method'] : '');
}
} elseif (isset($metadata['section']) && '' !== $metadata['section']) {
$title .= is_scalar($metadata['section']) ? (string) $metadata['section'] : '';
} else {
$title .= 'Documentation Chunk';
}
$markdown .= $title . "\n\n";
// Add metadata
if (isset($result['sdk']) && '' !== $result['sdk']) {
$sdkName = is_scalar($result['sdk']) ? (string) $result['sdk'] : '';
$markdown .= "**SDK:** `{$sdkName}` \n";
}
if (isset($result['source']) && '' !== $result['source']) {
$sourceName = is_scalar($result['source']) ? (string) $result['source'] : '';
$markdown .= "**Source:** `{$sourceName}` \n";
}
if (isset($result['score']) && 0.0 !== $result['score']) {
$scoreValue = is_numeric($result['score']) ? (float) $result['score'] : 0.0;
$markdown .= '**Relevance:** ' . (string) round($scoreValue * 100.0) . "% \n";
}
$markdown .= "\n";
// Add preview
if (isset($result['preview']) && '' !== $result['preview']) {
$preview = is_scalar($result['preview']) ? (string) $result['preview'] : '';
// Limit preview length
if (500 < strlen($preview)) {
$preview = substr($preview, 0, 497) . '...';
}
$markdown .= "**Preview:**\n```\n{$preview}\n```\n";
}
// Add navigation
if (isset($result['chunk_id']) && '' !== $result['chunk_id']) {
$sdk = isset($result['sdk']) && is_scalar($result['sdk']) ? (string) $result['sdk'] : 'unknown';
$id = isset($result['chunk_id']) && is_scalar($result['chunk_id']) ? (string) $result['chunk_id'] : 'unknown';
$markdown .= "\n**Reference:** `{$sdk}::{$id}`\n";
}
return $markdown . "\n---\n\n";
}
/**
* Format a similar documentation result as markdown.
*
* @param array<string, mixed> $chunk
* @param int $number
*/
private function formatSimilarResult(array $chunk, int $number): string
{
$markdown = sprintf('### %d. ', $number);
// Build title
$title = '';
$metadata = isset($chunk['metadata']) && is_array($chunk['metadata']) ? $chunk['metadata'] : [];
if (isset($metadata['class']) && '' !== $metadata['class']) {
$title .= is_scalar($metadata['class']) ? (string) $metadata['class'] : '';
if (isset($metadata['method']) && '' !== $metadata['method']) {
$title .= '::' . (is_scalar($metadata['method']) ? (string) $metadata['method'] : '');
}
} elseif (isset($metadata['section']) && '' !== $metadata['section']) {
$title .= is_scalar($metadata['section']) ? (string) $metadata['section'] : '';
} else {
$title .= 'Related Documentation';
}
$markdown .= $title . "\n\n";
// Add metadata
if (isset($chunk['sdk']) && '' !== $chunk['sdk']) {
$chunkSdkValue = is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : '';
$markdown .= "**SDK:** `{$chunkSdkValue}` \n";
}
if (isset($chunk['similarity']) && 0.0 !== $chunk['similarity']) {
$simScore = is_numeric($chunk['similarity']) ? (float) $chunk['similarity'] : 0.0;
$markdown .= '**Similarity Score:** ' . (string) round($simScore * 100.0) . "% \n";
}
if (isset($chunk['source']) && '' !== $chunk['source']) {
$sourceValue = is_scalar($chunk['source']) ? (string) $chunk['source'] : '';
$markdown .= "**Source:** `{$sourceValue}` \n";
}
$markdown .= "\n";
// Add content preview
if (isset($chunk['content']) && '' !== $chunk['content']) {
$preview = is_scalar($chunk['content']) ? (string) $chunk['content'] : '';
// Limit preview length
if (800 < strlen($preview)) {
$preview = substr($preview, 0, 797) . '...';
}
$markdown .= "**Content:**\n\n" . $preview . "\n";
}
// Add reference
if (isset($chunk['chunk_id']) && '' !== $chunk['chunk_id']) {
$sdk = isset($chunk['sdk']) && is_scalar($chunk['sdk']) ? (string) $chunk['sdk'] : 'unknown';
$id = isset($chunk['chunk_id']) && is_scalar($chunk['chunk_id']) ? (string) $chunk['chunk_id'] : 'unknown';
$markdown .= "\n**Reference:** `{$sdk}::{$id}`\n";
}
return $markdown . "\n---\n\n";
}
/**
* Get the full content of a chunk by its ID.
*
* @param string $chunkId
* @param DocumentationIndex $index
*/
private function getChunkContent(string $chunkId, DocumentationIndex $index): string
{
// For now, we'll use the chunk ID to get content
// In a real implementation, we'd fetch this from the index
$chunk = $index->getChunkById($chunkId);
if (null === $chunk) {
return '';
}
return $chunk['content'] ?? '';
}
/**
* Map programming language to SDK.
*
* @param string|null $language
*/
private function mapLanguageToSdk(?string $language): ?string
{
if (null === $language) {
return null;
}
$mapping = [
'php' => 'php',
'go' => 'go',
'python' => 'python',
'java' => 'java',
'csharp' => 'dotnet',
'javascript' => 'js',
'typescript' => 'js',
];
return $mapping[$language] ?? null;
}
/**
* Perform search based on search type.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
* @param string $searchType
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function performSearch(DocumentationIndex $index, string $query, ?string $sdk, string $searchType): array
{
return match ($searchType) {
'class' => $this->searchForClasses($index, $query, $sdk),
'method' => $this->searchForMethods($index, $query, $sdk),
'section' => $this->searchForSections($index, $query, $sdk),
default => $index->searchChunks($query, $sdk),
};
}
/**
* Search specifically for classes.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function searchForClasses(DocumentationIndex $index, string $query, ?string $sdk): array
{
$allChunks = $index->searchChunks($query, $sdk);
$classResults = [];
foreach ($allChunks as $allChunk) {
$metadata = $allChunk['metadata'];
if (isset($metadata['class']) && '' !== $metadata['class'] && is_scalar($metadata['class']) && false !== stripos((string) $metadata['class'], $query)) {
$classResults[] = $allChunk;
}
}
return $classResults;
}
/**
* Search specifically for methods.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function searchForMethods(DocumentationIndex $index, string $query, ?string $sdk): array
{
$allChunks = $index->searchChunks($query, $sdk);
$methodResults = [];
foreach ($allChunks as $allChunk) {
$metadata = $allChunk['metadata'];
if (isset($metadata['method']) && '' !== $metadata['method'] && is_scalar($metadata['method']) && false !== stripos((string) $metadata['method'], $query)) {
$methodResults[] = $allChunk;
}
}
return $methodResults;
}
/**
* Search specifically for sections.
*
* @param DocumentationIndex $index
* @param string $query
* @param string|null $sdk
*
* @throws RuntimeException If search fails
*
* @return array<array<string, mixed>>
*/
private function searchForSections(DocumentationIndex $index, string $query, ?string $sdk): array
{
$allChunks = $index->searchChunks($query, $sdk);
$sectionResults = [];
foreach ($allChunks as $allChunk) {
$metadata = $allChunk['metadata'];
if (isset($metadata['section']) && '' !== $metadata['section'] && is_scalar($metadata['section']) && false !== stripos((string) $metadata['section'], $query)) {
$sectionResults[] = $allChunk;
}
}
return $sectionResults;
}
}�j Nuj j j# j4 j= jJ jW jd jq j~ j� j� j� j� j� j� j� j� j� j j
j j' j4 jA jN j[ jd jq j~ j� j� j� j� j� j� j� j� j� j j j j+ j8 jE jR j_ jl jy j� j� j� j� j� j� j� j� j� j� j j j" j/ j< jM jV jc jp j} j� j� j� j� j� j� j� j� j� j� j j j& j3 j@ jQ jZ jg jt j� j� j� j� j� j� j� j� j� j� j j j j* j7 jD jQ j^ jk jx j� j� j� j� j� j� j� j� j� j� j j j! j. j; jH jY jb jo j| j� j� j� j� j� j� j� j� j� j� j
j
j%
j6
j?
jL
jY
jf
js
j�
j�
j�
j�
j�
j�
j�
j�
j�
j�
j j j j) j6 jC jP j] jj jw j� j� j� j� j� j� j� j� j� j� j j j j- j> jG jT ja jr j{ j� j� j� j� j� j� j� j� j� j� j
j
j$
j1
j>
jO
jX
je
jr
j
j�
j�
j�
j�
j�
j�
j�
j�
j�
j j j j( e]�(j� j e�����&src/Tools/DocumentationTools.php-False�� 4c1690a2af21a98442f4ef723e97f44b�]�(}�(�name��OpenFGA\MCP\Tools��kind�K�range�}�(�start�}�(�line�K� character�K u�end�}�(jK KjL Kuu�selectionRange�}�(jI }�(jK KjL K
ujM }�(jK KjL Kuu�location�}�(�uri��Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php��range�jH �absolutePath��K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php��relativePath�� src/Tools/DocumentationTools.php�u�children�]��parent�Nu}�(jD �DocumentationTools�jF KjG }�(jI }�(jK KjL K ujM }�(jK MXjL KuujO }�(jI }�(jK KjL KujM }�(jK KjL K'uu�children�]�(}�(jD �$client��detail��
(promoted)�jF KjG }�(jI }�(jK KjL KujM }�(jK KjL K'uujO }�(jI }�(jK KjL K ujM }�(jK KjL K'uuj^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jm jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �__construct�jF K jG }�(jI }�(jK KjL KujM }�(jK KjL KuujO }�(jI }�(jK KjL KujM }�(jK KjL Kuujg ]�}�(jD �$client�jF K
jG }�(jI }�(jK KjL KujM }�(jK KjL K'uujO }�(jI }�(jK KjL K ujM }�(jK KjL K'uuj^ jw jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uaj^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jy jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �findSimilarDocumentation�jF KjG }�(jI }�(jK KjL KujM }�(jK K�jL KuujO }�(jI }�(jK K'jL KujM }�(jK K'jL K,uujg ]�(}�(jD �$content�jF K
jG }�(jI }�(jK K(jL KujM }�(jK K(jL KuujO }�(jI }�(jK K(jL KujM }�(jK K(jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK K)jL KujM }�(jK K)jL KuujO }�(jI }�(jK K)jL KujM }�(jK K)jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$similarity_threshold�jF K
jG }�(jI }�(jK K*jL KujM }�(jK K*jL K)uujO }�(jI }�(jK K*jL KujM }�(jK K*jL K#uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$limit�jF K
jG }�(jI }�(jK K+jL KujM }�(jK K+jL KuujO }�(jI }�(jK K+jL KujM }�(jK K+jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$validSdks�jF K
jG }�(jI }�(jK K9jL KujM }�(jK K9jL KuujO }�(jI }�(jK K9jL KujM }�(jK K9jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$index�jF K
jG }�(jI }�(jK K?jL KujM }�(jK K?jL KuujO }�(jI }�(jK K?jL KujM }�(jK K?jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $keyTerms�jF K
jG }�(jI }�(jK KFjL KujM }�(jK KFjL KuujO }�(jI }�(jK KFjL KujM }�(jK KFjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$similarChunks�jF K
jG }�(jI }�(jK KNjL KujM }�(jK KNjL KuujO }�(jI }�(jK KNjL KujM }�(jK KNjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$keyTerm�jF K
jG }�(jI }�(jK KPjL KujM }�(jK KPjL K&uujO }�(jI }�(jK KPjL KujM }�(jK KPjL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunks�jF K
jG }�(jI }�(jK KQjL KujM }�(jK KQjL KuujO }�(jI }�(jK KQjL KujM }�(jK KQjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunk�jF K
jG }�(jI }�(jK KSjL K ujM }�(jK KSjL K&uujO }�(jI }�(jK KSjL K ujM }�(jK KSjL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$chunkContent�jF K
jG }�(jI }�(jK KVjL KujM }�(jK KVjL KuujO }�(jI }�(jK KVjL KujM }�(jK KVjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$similarity�jF K
jG }�(jI }�(jK KWjL KujM }�(jK KWjL KuujO }�(jI }�(jK KWjL KujM }�(jK KWjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j* jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkWithSimilarity�jF K
jG }�(jI }�(jK K[jL KujM }�(jK K[jL K(uujO }�(jI }�(jK K[jL KujM }�(jK K[jL K(uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j6 jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkWithSimilarity�jF K
jG }�(jI }�(jK K\jL KujM }�(jK K\jL K(uujO }�(jI }�(jK K\jL KujM }�(jK K\jL K(uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jB jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkWithSimilarity�jF K
jG }�(jI }�(jK K]jL KujM }�(jK K]jL K(uujO }�(jI }�(jK K]jL KujM }�(jK K]jL K(uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jN jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $chunkKey�jF K
jG }�(jI }�(jK K_jL KujM }�(jK K_jL KuujO }�(jI }�(jK K_jL KujM }�(jK K_jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jZ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$similarChunks�jF K
jG }�(jI }�(jK KbjL KujM }�(jK KbjL K&uujO }�(jI }�(jK KbjL KujM }�(jK KbjL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jf jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $chunkKey�jF K
jG }�(jI }�(jK KbjL K'ujM }�(jK KbjL K0uujO }�(jI }�(jK KbjL K'ujM }�(jK KbjL K0uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jr jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$existingSim�jF K
jG }�(jI }�(jK KdjL KujM }�(jK KdjL K$uujO }�(jI }�(jK KdjL KujM }�(jK KdjL K$uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j~ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$similarChunks�jF K
jG }�(jI }�(jK KgjL KujM }�(jK KgjL K*uujO }�(jI }�(jK KgjL KujM }�(jK KgjL K*uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $chunkKey�jF K
jG }�(jI }�(jK KgjL K+ujM }�(jK KgjL K4uujO }�(jI }�(jK KgjL K+ujM }�(jK KgjL K4uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �Closure�jF KjG }�(jI }�(jK KojL KujM }�(jK KujL K uujO }�(jI }�(jK KojL KujM }�(jK KujL K uujg ]�(}�(jD �$a�jF K
jG }�(jI }�(jK KojL K/ujM }�(jK KojL K7uujO }�(jI }�(jK KojL K5ujM }�(jK KojL K7uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$b�jF K
jG }�(jI }�(jK KojL K9ujM }�(jK KojL KAuujO }�(jI }�(jK KojL K?ujM }�(jK KojL KAuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$aSimilarity�jF K
jG }�(jI }�(jK KqjL KujM }�(jK KqjL KuujO }�(jI }�(jK KqjL KujM }�(jK KqjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$bSimilarity�jF K
jG }�(jI }�(jK KrjL KujM }�(jK KrjL KuujO }�(jI }�(jK KrjL KujM }�(jK KrjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �$similarChunks�jF K
jG }�(jI }�(jK KxjL KujM }�(jK KxjL KuujO }�(jI }�(jK KxjL KujM }�(jK KxjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $markdown�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkIndex�jF K
jG }�(jI }�(jK K�jL K#ujM }�(jK K�jL K.uujO }�(jI }�(jK K�jL K#ujM }�(jK K�jL K.uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunk�jF K
jG }�(jI }�(jK K�jL K2ujM }�(jK K�jL K8uujO }�(jI }�(jK K�jL K2ujM }�(jK K�jL K8uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �searchCodeExamples�jF KjG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL K&uujg ]�(}�(jD �$query�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $language�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL K uujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j& jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$include_context�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL K$uujO }�(jI }�(jK K�jL K
ujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j2 jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$limit�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j> jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$offset�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jJ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$validLanguages�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jV jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$index�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jb jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jn jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$allChunks�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jz jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$codeExamples�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $allChunk�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL K(uujO }�(jI }�(jK K�jL KujM }�(jK K�jL K(uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $examples�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$example�jF K
jG }�(jI }�(jK K�jL K"ujM }�(jK K�jL K*uujO }�(jI }�(jK K�jL K"ujM }�(jK K�jL K*uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$example�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$codeExamples�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$totalExamples�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$paginatedExamples�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$currentPage�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$totalPages�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�� jZ j[ uj\ ]�u}�(jD � $markdown�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$exampleIndex�jF K
jG }�(jI }�(jK K�jL K'ujM }�(jK K�jL K4uujO }�(jI }�(jK K�jL K'ujM }�(jK K�jL K4uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j
jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$example�jF K
jG }�(jI }�(jK K�jL K8ujM }�(jK K�jL K@uujO }�(jI }�(jK K�jL K8ujM }�(jK K�jL K@uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$exampleNumber�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j" jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$prevOffset�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j. jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$nextOffset�jF K
jG }�(jI }�(jK K�jL KujM }�(jK K�jL KuujO }�(jI }�(jK K�jL KujM }�(jK K�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j: jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �searchDocumentation�jF KjG }�(jI }�(jK K�jL KujM }�(jK MYjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL K'uujg ]�(}�(jD �$query�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jR jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j^ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$search_type�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL K'uujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jj jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$limit�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jv jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$offset�jF K
jG }�(jI }�(jK M jL KujM }�(jK M jL KuujO }�(jI }�(jK M jL KujM }�(jK M jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$validSearchTypes�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$validSdks�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$index�jF K
jG }�(jI }�(jK M#jL KujM }�(jK M#jL KuujO }�(jI }�(jK M#jL KujM }�(jK M#jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$allResults�jF K
jG }�(jI }�(jK M*jL KujM }�(jK M*jL KuujO }�(jI }�(jK M*jL KujM }�(jK M*jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$totalResults�jF K
jG }�(jI }�(jK M+jL KujM }�(jK M+jL KuujO }�(jI }�(jK M+jL KujM }�(jK M+jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$paginatedResults�jF K
jG }�(jI }�(jK M4jL KujM }�(jK M4jL KuujO }�(jI }�(jK M4jL KujM }�(jK M4jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$currentPage�jF K
jG }�(jI }�(jK M5jL KujM }�(jK M5jL KuujO }�(jI }�(jK M5jL KujM }�(jK M5jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$totalPages�jF K
jG }�(jI }�(jK M6jL KujM }�(jK M6jL KuujO }�(jI }�(jK M6jL KujM }�(jK M6jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $markdown�jF K
jG }�(jI }�(jK M9jL KujM }�(jK M9jL KuujO }�(jI }�(jK M9jL KujM }�(jK M9jL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$resultIndex�jF K
jG }�(jI }�(jK MDjL K&ujM }�(jK MDjL K2uujO }�(jI }�(jK MDjL K&ujM }�(jK MDjL K2uuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$result�jF K
jG }�(jI }�(jK MDjL K6ujM }�(jK MDjL K=uujO }�(jI }�(jK MDjL K6ujM }�(jK MDjL K=uuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$resultNumber�jF K
jG }�(jI }�(jK MEjL KujM }�(jK MEjL KuujO }�(jI }�(jK MEjL KujM }�(jK MEjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$prevOffset�jF K
jG }�(jI }�(jK MNjL KujM }�(jK MNjL KuujO }�(jI }�(jK MNjL KujM }�(jK MNjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$nextOffset�jF K
jG }�(jI }�(jK MSjL KujM }�(jK MSjL KuujO }�(jI }�(jK MSjL KujM }�(jK MSjL Kuuj^ jG jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j* jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jI jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �calculateSimilarity�jF KjG }�(jI }�(jK M[jL KujM }�(jK M�jL KuujO }�(jI }�(jK MbjL KujM }�(jK MbjL K(uujg ]�(}�(jD � $content1�jF K
jG }�(jI }�(jK MbjL K)ujM }�(jK MbjL K9uujO }�(jI }�(jK MbjL K0ujM }�(jK MbjL K9uuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jB jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $content2�jF K
jG }�(jI }�(jK MbjL K;ujM }�(jK MbjL KKuujO }�(jI }�(jK MbjL KBujM }�(jK MbjL KKuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jN jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$terms1�jF K
jG }�(jI }�(jK MijL KujM }�(jK MijL KuujO }�(jI }�(jK MijL KujM }�(jK MijL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jZ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$terms2�jF K
jG }�(jI }�(jK MjjL KujM }�(jK MjjL KuujO }�(jI }�(jK MjjL KujM }�(jK MjjL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jf jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$intersection�jF K
jG }�(jI }�(jK MqjL KujM }�(jK MqjL KuujO }�(jI }�(jK MqjL KujM }�(jK MqjL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jr jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$union�jF K
jG }�(jI }�(jK MrjL KujM }�(jK MrjL KuujO }�(jI }�(jK MrjL KujM }�(jK MrjL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j~ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$jaccard�jF K
jG }�(jI }�(jK MxjL KujM }�(jK MxjL KuujO }�(jI }�(jK MxjL KujM }�(jK MxjL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$phrases�jF K
jG }�(jI }�(jK M{jL KujM }�(jK M{jL KuujO }�(jI }�(jK M{jL KujM }�(jK M{jL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$phraseBonus�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$phrase�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K$uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K$uuj^ j7 jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j9 jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �extractCodeFromChunk�jF KjG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL K)uujg ]�(}�(jD �$chunk�jF K
jG }�(jI }�(jK M�jL K*ujM }�(jK M�jL K6uujO }�(jI }�(jK M�jL K0ujM }�(jK M�jL K6uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $language�jF K
jG }�(jI }�(jK M�jL K8ujM }�(jK M�jL KIuujO }�(jI }�(jK M�jL K@ujM }�(jK M�jL KIuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$content�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $examples�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$pattern�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$result�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$match�jF K
jG }�(jI }�(jK M�jL K!ujM }�(jK M�jL K'uujO }�(jI }�(jK M�jL K!ujM }�(jK M�jL K'uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $codeLang�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$codeContent�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j& jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j2 jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K&uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j> jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K&uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jJ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K&uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jV jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K&uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jb jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K&uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jn jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$langMatch�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL K&uujO }�(jI }�(jK M�jL KujM }�(jK M�jL K&uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jz jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $examples�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �extractContext�jF KjG }�(jI }�(jK M�jL KujM }�(jK MjL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL K#uujg ]�(}�(jD �$content�jF K
jG }�(jI }�(jK M�jL K$ujM }�(jK M�jL K3uujO }�(jI }�(jK M�jL K+ujM }�(jK M�jL K3uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$codeBlock�jF K
jG }�(jI }�(jK M�jL K5ujM }�(jK M�jL KFuujO }�(jI }�(jK M�jL K<ujM }�(jK M�jL KFuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $position�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$beforeStart�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$beforeText�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$afterStart�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$afterText�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$beforeText�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$afterText�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$context�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j
jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �extractKeyTerms�jF KjG }�(jI }�(jK MjL KujM }�(jK M3jL KuujO }�(jI }�(jK M
jL KujM }�(jK M
jL K$uujg ]�(}�(jD �$content�jF K
jG }�(jI }�(jK M
jL K%ujM }�(jK M
jL K4uujO }�(jI }�(jK M
jL K,ujM }�(jK M
jL K4uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j" jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$cleanContent�jF K
jG }�(jI }�(jK M
jL KujM }�(jK M
jL KuujO }�(jI }�(jK M
jL KujM }�(jK M
jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j. jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$cleanContent�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j: jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$cleanContent�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jF jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$cleanContent�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jR jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$words�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j^ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$words�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jj jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$stopWords�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jv jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $keyTerms�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$termCounts�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$word�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL K uujO }�(jI }�(jK MjL KujM }�(jK MjL K uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$termCounts�jF K
jG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK MjL KujM }�(jK MjL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$word�jF K
jG }�(jI }�(jK MjL K ujM }�(jK MjL K%uujO }�(jI }�(jK MjL K ujM }�(jK MjL K%uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $keyTerms�jF K
jG }�(jI }�(jK M'jL KujM }�(jK M'jL KuujO }�(jI }�(jK M'jL KujM }�(jK M'jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$openfgaTerms�jF K
jG }�(jI }�(jK M*jL KujM }�(jK M*jL KuujO }�(jI }�(jK M*jL KujM }�(jK M*jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$openfgaTerm�jF K
jG }�(jI }�(jK M,jL K"ujM }�(jK M,jL K.uujO }�(jI }�(jK M,jL K"ujM }�(jK M,jL K.uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $keyTerms�jF K
jG }�(jI }�(jK M.jL KujM }�(jK M.jL KuujO }�(jI }�(jK M.jL KujM }�(jK M.jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �formatCodeExample�jF KjG }�(jI }�(jK M5jL KujM }�(jK MfjL KuujO }�(jI }�(jK M<jL KujM }�(jK M<jL K&uujg ]�(}�(jD �$example�jF K
jG }�(jI }�(jK M<jL K'ujM }�(jK M<jL K5uujO }�(jI }�(jK M<jL K-ujM }�(jK M<jL K5uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$number�jF K
jG }�(jI }�(jK M<jL K7ujM }�(jK M<jL KBuujO }�(jI }�(jK M<jL K;ujM }�(jK M<jL KBuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$includeContext�jF K
jG }�(jI }�(jK M<jL KDujM }�(jK M<jL KXuujO }�(jI }�(jK M<jL KIujM }�(jK M<jL KXuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $markdown�jF K
jG }�(jI }�(jK M>jL KujM }�(jK M>jL KuujO }�(jI }�(jK M>jL KujM }�(jK M>jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunk�jF K
jG }�(jI }�(jK M@jL KujM }�(jK M@jL KuujO }�(jI }�(jK M@jL KujM }�(jK M@jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j* jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $chunkSdk�jF K
jG }�(jI }�(jK MDjL KujM }�(jK MDjL KuujO }�(jI }�(jK MDjL KujM }�(jK MDjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j6 jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkClass�jF K
jG }�(jI }�(jK MIjL KujM }�(jK MIjL KuujO }�(jI }�(jK MIjL KujM }�(jK MIjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jB jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkMethod�jF K
jG }�(jI }�(jK MMjL KujM }�(jK MMjL KuujO }�(jI }�(jK MMjL KujM }�(jK MMjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jN jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$exampleLang�jF K
jG }�(jI }�(jK MTjL KujM }�(jK MTjL KuujO }�(jI }�(jK MTjL KujM }�(jK MTjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jZ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$context�jF K
jG }�(jI }�(jK M\jL KujM }�(jK M\jL KuujO }�(jI }�(jK M\jL KujM }�(jK M\jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jf jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$lang�jF K
jG }�(jI }�(jK MajL KujM }�(jK MajL K
uujO }�(jI }�(jK MajL KujM }�(jK MajL K
uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jr jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$code�jF K
jG }�(jI }�(jK MbjL KujM }�(jK MbjL K
uujO }�(jI }�(jK MbjL KujM }�(jK MbjL K
uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j~ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �formatSearchResult�jF KjG }�(jI }�(jK MhjL KujM }�(jK M�jL KuujO }�(jI }�(jK MnjL KujM }�(jK MnjL K'uujg ]�(}�(jD �$result�jF K
jG }�(jI }�(jK MnjL K(ujM }�(jK MnjL K5uujO }�(jI }�(jK MnjL K.ujM }�(jK MnjL K5uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$number�jF K
jG }�(jI }�(jK MnjL K7ujM }�(jK MnjL KBuujO }�(jI }�(jK MnjL K;ujM }�(jK MnjL KBuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $markdown�jF K
jG }�(jI }�(jK MpjL KujM }�(jK MpjL KuujO }�(jI }�(jK MpjL KujM }�(jK MpjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$title�jF K
jG }�(jI }�(jK MsjL KujM }�(jK MsjL KuujO }�(jI }�(jK MsjL KujM }�(jK MsjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdkName�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sourceName�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$scoreValue�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$preview�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$preview�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$id�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �formatSimilarResult�jF KjG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL K(uujg ]�(}�(jD �$chunk�jF K
jG }�(jI }�(jK M�jL K)ujM }�(jK M�jL K5uujO }�(jI }�(jK M�jL K/ujM }�(jK M�jL K5uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j& jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$number�jF K
jG }�(jI }�(jK M�jL K7ujM }�(jK M�jL KBuujO }�(jI }�(jK M�jL K;ujM }�(jK M�jL KBuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j2 jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $markdown�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j> jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$title�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jJ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$chunkSdkValue�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jV jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $simScore�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jb jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sourceValue�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jn jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$preview�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jz jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$preview�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$id�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �mapLanguageToSdk�jF KjG }�(jI }�(jK M�jL KujM }�(jK MjL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL K%uujg ]�(}�(jD � $language�jF K
jG }�(jI }�(jK M�jL K&ujM }�(jK M�jL K7uujO }�(jI }�(jK M�jL K.ujM }�(jK M�jL K7uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$mapping�jF K
jG }�(jI }�(jK M�jL KujM }�(jK M�jL KuujO }�(jI }�(jK M�jL KujM }�(jK M�jL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �
performSearch�jF KjG }�(jI }�(jK MjL KujM }�(jK MjL KuujO }�(jI }�(jK M
jL KujM }�(jK M
jL K"uujg ]�(}�(jD �$index�jF K
jG }�(jI }�(jK M
jL K#ujM }�(jK M
jL K<uujO }�(jI }�(jK M
jL K6ujM }�(jK M
jL K<uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$query�jF K
jG }�(jI }�(jK M
jL K>ujM }�(jK M
jL KKuujO }�(jI }�(jK M
jL KEujM }�(jK M
jL KKuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK M
jL KMujM }�(jK M
jL KYuujO }�(jI }�(jK M
jL KUujM }�(jK M
jL KYuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$searchType�jF K
jG }�(jI }�(jK M
jL K[ujM }�(jK M
jL KmuujO }�(jI }�(jK M
jL KbujM }�(jK M
jL Kmuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �searchForClasses�jF KjG }�(jI }�(jK MjL KujM }�(jK M+jL KuujO }�(jI }�(jK MjL KujM }�(jK MjL K%uujg ]�(}�(jD �$index�jF K
jG }�(jI }�(jK MjL K&ujM }�(jK MjL K?uujO }�(jI }�(jK MjL K9ujM }�(jK MjL K?uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$query�jF K
jG }�(jI }�(jK MjL KAujM }�(jK MjL KNuujO }�(jI }�(jK MjL KHujM }�(jK MjL KNuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j" jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK MjL KPujM }�(jK MjL K\uujO }�(jI }�(jK MjL KXujM }�(jK MjL K\uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j. jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$allChunks�jF K
jG }�(jI }�(jK M!jL KujM }�(jK M!jL KuujO }�(jI }�(jK M!jL KujM }�(jK M!jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j: jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$classResults�jF K
jG }�(jI }�(jK M"jL KujM }�(jK M"jL KuujO }�(jI }�(jK M"jL KujM }�(jK M"jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jF jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $allChunk�jF K
jG }�(jI }�(jK M$jL KujM }�(jK M$jL K(uujO }�(jI }�(jK M$jL KujM }�(jK M$jL K(uuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jR jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$classResults�jF K
jG }�(jI }�(jK M&jL KujM }�(jK M&jL KuujO }�(jI }�(jK M&jL KujM }�(jK M&jL Kuuj^ j jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j^ jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j
jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �searchForMethods�jF KjG }�(jI }�(jK M-jL KujM }�(jK MAjL KuujO }�(jI }�(jK M5jL KujM }�(jK M5jL K%uujg ]�(}�(jD �$index�jF K
jG }�(jI }�(jK M5jL K&ujM }�(jK M5jL K?uujO }�(jI }�(jK M5jL K9ujM }�(jK M5jL K?uuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jv jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$query�jF K
jG }�(jI }�(jK M5jL KAujM }�(jK M5jL KNuujO }�(jI }�(jK M5jL KHujM }�(jK M5jL KNuuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK M5jL KPujM }�(jK M5jL K\uujO }�(jI }�(jK M5jL KXujM }�(jK M5jL K\uuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$allChunks�jF K
jG }�(jI }�(jK M7jL KujM }�(jK M7jL KuujO }�(jI }�(jK M7jL KujM }�(jK M7jL Kuuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$methodResults�jF K
jG }�(jI }�(jK M8jL KujM }�(jK M8jL KuujO }�(jI }�(jK M8jL KujM }�(jK M8jL Kuuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $allChunk�jF K
jG }�(jI }�(jK M:jL KujM }�(jK M:jL K(uujO }�(jI }�(jK M:jL KujM }�(jK M:jL K(uuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$methodResults�jF K
jG }�(jI }�(jK M<jL KujM }�(jK M<jL KuujO }�(jI }�(jK M<jL KujM }�(jK M<jL Kuuj^ jk jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW jm jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uu}�(jD �searchForSections�jF KjG }�(jI }�(jK MCjL KujM }�(jK MWjL KuujO }�(jI }�(jK MKjL KujM }�(jK MKjL K&uujg ]�(}�(jD �$index�jF K
jG }�(jI }�(jK MKjL K'ujM }�(jK MKjL K@uujO }�(jI }�(jK MKjL K:ujM }�(jK MKjL K@uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$query�jF K
jG }�(jI }�(jK MKjL KBujM }�(jK MKjL KOuujO }�(jI }�(jK MKjL KIujM }�(jK MKjL KOuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sdk�jF K
jG }�(jI }�(jK MKjL KQujM }�(jK MKjL K]uujO }�(jI }�(jK MKjL KYujM }�(jK MKjL K]uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �
$allChunks�jF K
jG }�(jI }�(jK MMjL KujM }�(jK MMjL KuujO }�(jI }�(jK MMjL KujM }�(jK MMjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sectionResults�jF K
jG }�(jI }�(jK MNjL KujM }�(jK MNjL KuujO }�(jI }�(jK MNjL KujM }�(jK MNjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD � $allChunk�jF K
jG }�(jI }�(jK MPjL KujM }�(jK MPjL K(uujO }�(jI }�(jK MPjL KujM }�(jK MPjL K(uuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�u}�(jD �$sectionResults�jF K
jG }�(jI }�(jK MRjL KujM }�(jK MRjL KuujO }�(jI }�(jK MRjL KujM }�(jK MRjL Kuuj^ j� jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj\ ]�uej^ j_ jS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW j� jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uuejS }�(jU �Rfile:///Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jW ja jX �K/Users/evan/Developer/evansims/openfga-mcp/src/Tools/DocumentationTools.php�jZ j[ uj^ Nuji jw j� j� j� j� j� j� j� j� j� j� j� j j j j( j4 j@ jL jX jd jp j| j� j� j� j� j� j� j� j� j� j� j j j j$ j0 j< jH jT j` jl jx j� j� j� j� j� j� j� j� j� j� j� j j j j, j8 jG jP j\ jh jt j� j� j� j� j� j� j� j� j� j� j� j j j j( j7 j@ jL jX jd jp j| j� j� j� j� j� j� j� j� j� j� j j j j$ j0 j< jH jT j` jl jx j� j� j� j� j� j� j� j� j� j� j� j j j j, j8 jD jP j\ jh jt j� j� j� j� j� j� j� j� j� j� j� j j j j( j4 j@ jL jX jd jp j| j� j� j� j� j� j� j� j� j� j� j j j j$ j0 j< jH jT j` jl jx j� j� j� j� j� j� j� j� j� j� j� j j j j, j8 jD jP j\ jk jt j� j� j� j� j� j� j� j� j� j� j� j j j e]�(jC j_ e�����.src/Documentation/DocumentationIndex.php-False�� 5decbb0388fe323246fab949299c4898�]�(}�(�name��OpenFGA\MCP\Documentation��kind�K�range�}�(�start�}�(�line�K� character�K u�end�}�(j< Kj= K$uu�selectionRange�}�(j: }�(j< Kj= K
uj> }�(j< Kj= K#uujS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j9 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ �(src/Documentation/DocumentationIndex.php�uj\ ]�j^ Nu}�(j5 �DocumentationIndex�j7 Kj8 }�(j: }�(j< K
j= K uj> }�(j< M�j= Kuuj@ }�(j: }�(j< K
j= Kuj> }�(j< K
j= Kuu�children�]�(}�(j5 �CHUNK_SIZE_LIMIT�j7 Kj8 }�(j: }�(j< Kj= Kuj> }�(j< Kj= K-uuj@ }�(j: }�(j< Kj= Kuj> }�(j< Kj= K&uuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jU jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � DOCS_PATH�j7 Kj8 }�(j: }�(j< Kj= Kuj> }�(j< Kj= K<uuj@ }�(j: }�(j< Kj= Kuj> }�(j< Kj= K"uuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW ja jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunks�j7 Kj8 }�(j: }�(j< Kj= Kuj> }�(j< Kj= Kuuj@ }�(j: }�(j< Kj= Kuj> }�(j< Kj= Kuuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jm jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$index�j7 Kj8 }�(j: }�(j< Kj= Kuj> }�(j< Kj= Kuuj@ }�(j: }�(j< Kj= Kuj> }�(j< Kj= Kuuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jy jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$initialized�j7 Kj8 }�(j: }�(j< Kj= Kuj> }�(j< Kj= K%uuj@ }�(j: }�(j< Kj= Kuj> }�(j< Kj= Kuuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkList�j7 Kj8 }�(j: }�(j< K"j= Kuj> }�(j< K"j= Kuuj@ }�(j: }�(j< K"j= Kuj> }�(j< K"j= Kuuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �getChunk�j7 Kj8 }�(j: }�(j< K$j= Kuj> }�(j< K0j= Kuuj@ }�(j: }�(j< K+j= Kuj> }�(j< K+j= KuujQ ]�}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< K+j= Kuj> }�(j< K+j= K,uuj@ }�(j: }�(j< K+j= K$uj> }�(j< K+j= K,uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uaj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �getChunksBySection�j7 Kj8 }�(j: }�(j< K2j= Kuj> }�(j< KSj= Kuuj@ }�(j: }�(j< K:j= Kuj> }�(j< K:j= K&uujQ ]�(}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< K:j= K'uj> }�(j< K:j= K2uuj@ }�(j: }�(j< K:j= K.uj> }�(j< K:j= K2uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$section�j7 K
j8 }�(j: }�(j< K:j= K4uj> }�(j< K:j= KCuuj@ }�(j: }�(j< K:j= K;uj> }�(j< K:j= KCuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkKey�j7 K
j8 }�(j: }�(j< K=j= Kuj> }�(j< K=j= Kuuj@ }�(j: }�(j< K=j= Kuj> }�(j< K=j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sectionData�j7 K
j8 }�(j: }�(j< KCj= Kuj> }�(j< KCj= Kuuj@ }�(j: }�(j< KCj= Kuj> }�(j< KCj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $chunkIds�j7 K
j8 }�(j: }�(j< KIj= Kuj> }�(j< KIj= Kuuj@ }�(j: }�(j< KIj= Kuj> }�(j< KIj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunks�j7 K
j8 }�(j: }�(j< KJj= Kuj> }�(j< KJj= Kuuj@ }�(j: }�(j< KJj= Kuj> }�(j< KJj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< KLj= Kuj> }�(j< KLj= K&uuj@ }�(j: }�(j< KLj= Kuj> }�(j< KLj= K&uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunks�j7 K
j8 }�(j: }�(j< KNj= Kuj> }�(j< KNj= Kuuj@ }�(j: }�(j< KNj= Kuj> }�(j< KNj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �getClassDocumentation�j7 Kj8 }�(j: }�(j< KUj= Kuj> }�(j< Kwj= Kuuj@ }�(j: }�(j< K]j= Kuj> }�(j< K]j= K)uujQ ]�(}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< K]j= K*uj> }�(j< K]j= K5uuj@ }�(j: }�(j< K]j= K1uj> }�(j< K]j= K5uuj^ j jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j* jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$className�j7 K
j8 }�(j: }�(j< K]j= K7uj> }�(j< K]j= KHuuj@ }�(j: }�(j< K]j= K>uj> }�(j< K]j= KHuuj^ j jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j6 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkKey�j7 K
j8 }�(j: }�(j< K`j= Kuj> }�(j< K`j= Kuuj@ }�(j: }�(j< K`j= Kuj> }�(j< K`j= Kuuj^ j jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jB jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$classInfo�j7 K
j8 }�(j: }�(j< Kfj= Kuj> }�(j< Kfj= Kuuj@ }�(j: }�(j< Kfj= Kuj> }�(j< Kfj= Kuuj^ j jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jN jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG u� j\ ]�u}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< Kgj= Kuj> }�(j< Kgj= Kuuj@ }�(j: }�(j< Kgj= Kuj> }�(j< Kgj= Kuuj^ j jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jZ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunk�j7 K
j8 }�(j: }�(j< Kmj= Kuj> }�(j< Kmj= Kuuj@ }�(j: }�(j< Kmj= Kuj> }�(j< Kmj= Kuuj^ j jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jf jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j! jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �getMethodDocumentation�j7 Kj8 }�(j: }�(j< Kyj= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= K*uujQ ]�(}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< K�j= K+uj> }�(j< K�j= K6uuj@ }�(j: }�(j< K�j= K2uj> }�(j< K�j= K6uuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j~ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$className�j7 K
j8 }�(j: }�(j< K�j= K8uj> }�(j< K�j= KIuuj@ }�(j: }�(j< K�j= K?uj> }�(j< K�j= KIuuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$methodName�j7 K
j8 }�(j: }�(j< K�j= KKuj> }�(j< K�j= K]uuj@ }�(j: }�(j< K�j= KRuj> }�(j< K�j= K]uuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $classDoc�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$methodInfo�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunk�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ js jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW ju jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �
getSdkList�j7 Kj8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �getSdkOverview�j7 Kj8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= K"uujQ ]�(}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< K�j= K#uj> }�(j< K�j= K.uuj@ }�(j: }�(j< K�j= K*uj> }�(j< K�j= K.uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkKey�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkData�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �
initialize�j7 Kj8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
isInitialized�j7 Kj8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= K!uuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �searchChunks�j7 Kj8 }�(j: }�(j< K�j= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= K uujQ ]�(}�(j5 �$query�j7 K
j8 }�(j: }�(j< K�j= K!uj> }�(j< K�j= K.uuj@ }�(j: }�(j< K�j= K(uj> }�(j< K�j= K.uuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j2 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< K�j= K0uj> }�(j< K�j= KCuuj@ }�(j: }�(j< K�j= K8uj> }�(j< K�j= K<uuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j> jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$limit�j7 K
j8 }�(j: }�(j< K�j= KEuj> }�(j< K�j= KTuuj@ }�(j: }�(j< K�j= KIuj> }�(j< K�j= KOuuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jJ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$results�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jV jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$queryLower�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jb jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< K�j= K"uj> }�(j< K�j= K*uuj@ }�(j: }�(j< K�j= K"uj> }�(j< K�j= K*uuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jn jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunk�j7 K
j8 }�(j: }�(j< K�j= K.uj> }�(j< K�j= K4uuj@ }�(j: }�(j< K�j= K.uj> }�(j< K�j= K4uuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jz jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$content�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$score�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$results�j7 K
j8 }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj@ }�(j: }�(j< K�j= Kuj> }�(j< K�j= Kuuj^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �Closure�j7 Kj8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= KNuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= KNuujQ ]�(}�(j5 �$a�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$b�j7 K
j8 }�(j: }�(j< Mj= K!uj> }�(j< Mj= K)uuj@ }�(j: }�(j< Mj= K'uj> }�(j< Mj= K)uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ j' jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uuej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j) jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �
buildIndex�j7 Kj8 }�(j: }�(j< M
j= Kuj> }�(j< M$j= Kuuj@ }�(j: }�(j< M
j= Kuj> }�(j< M
j= KuujQ ]�(}�(j5 �$sdkData�j7 K
j8 }�(j: }�(j< M
j= K!uj> }�(j< M
j= K)uuj@ }�(j: }�(j< M
j= K!uj> }�(j< M
j= K)uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $chunkIds�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$counter�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$i�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentId�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j
jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentId�j7 K
j8 }�(j: }�(j< Mj= K"uj> }�(j< Mj= K,uuj@ }�(j: }�(j< Mj= K"uj> }�(j< Mj= K,uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentId�j7 K
j8 }�(j: }�(j< M j= K"uj> }�(j< M j= K,uuj@ }�(j: }�(j< M j= K"uj> }�(j< M j= K,uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j" jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �calculateRelevanceScore�j7 Kj8 }�(j: }�(j< M&j= Kuj> }�(j< MKj= Kuuj@ }�(j: }�(j< M+j= Kuj> }�(j< M+j= K,uujQ ]�(}�(j5 �$query�j7 K
j8 }�(j: }�(j< M+j= K-uj> }�(j< M+j= K:uuj@ }�(j: }�(j< M+j= K4uj> }�(j< M+j= K:uuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j: jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$content�j7 K
j8 }�(j: }�(j< M+j= K<uj> }�(j< M+j= KKuuj@ }�(j: }�(j< M+j= KCuj> }�(j< M+j= KKuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jF jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $metadata�j7 K
j8 }�(j: }�(j< M+j= KMuj> }�(j< M+j= K\uuj@ }�(j: }�(j< M+j= KSuj> }�(j< M+j= K\uuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jR jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$score�j7 K
j8 }�(j: }�(j< M-j= Kuj> }�(j< M-j= Kuuj@ }�(j: }�(j< M-j= Kuj> }�(j< M-j= Kuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j^ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$queryTerms�j7 K
j8 }�(j: }�(j< M.j= Kuj> }�(j< M.j= Kuuj@ }�(j: }�(j< M.j= Kuj> }�(j< M.j= Kuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jj jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$queryTerm�j7 K
j8 }�(j: }�(j< M0j= K uj> }�(j< M0j= K*uuj@ }�(j: }�(j< M0j= K uj> }�(j< M0j= K*uuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jv jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$termCount�j7 K
j8 }�(j: }�(j< M1j= Kuj> }�(j< M1j= Kuuj@ }�(j: }�(j< M1j= Kuj> }�(j< M1j= Kuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$class�j7 K
j8 }�(j: }�(j< M5j= Kuj> }�(j< M5j= Kuuj@ }�(j: }�(j< M5j= Kuj> }�(j< M5j= Kuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$method�j7 K
j8 }�(j: }�(j< M<j= Kuj> }�(j< M<j= Kuuj@ }�(j: }�(j< M<j= Kuj> }�(j< M<j= Kuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$section�j7 K
j8 }�(j: }�(j< MCj= Kuj> }�(j< MCj= Kuuj@ }�(j: }�(j< MCj= Kuj> }�(j< MCj= Kuuj^ j/ jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j1 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �createChunk�j7 Kj8 }�(j: }�(j< MMj= Kuj> }�(j< Mwj= Kuuj@ }�(j: }�(j< MTj= Kuj> }�(j< MTj= K uujQ ]�(}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< MTj= K!uj> }�(j< MTj= K,uuj@ }�(j: }�(j< MTj= K(uj> }�(j< MTj= K,uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$lines�j7 K
j8 }�(j: }�(j< MTj= K.uj> }�(j< MTj= K:uuj@ }�(j: }�(j< MTj= K4uj> }�(j< MTj= K:uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$section�j7 K
j8 }�(j: }�(j< MTj= K<uj> }�(j< MTj= KLuuj@ }�(j: }�(j< MTj= KDuj> }�(j< MTj= KLuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$class�j7 K
j8 }�(j: }�(j< MTj= KNuj> }�(j< MTj= K\uuj@ }�(j: }�(j< MTj= KVuj> }�(j< MTj= K\uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$method�j7 K
j8 }�(j: }�(j< MTj= K^uj> }�(j< MTj= Kmuuj@ }�(j: }�(j< MTj= Kfuj> }�(j< MTj= Kmuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$content�j7 K
j8 }�(j: }�(j< MVj= Kuj> }�(j< MVj= Kuuj@ }�(j: }�(j< MVj= Kuj> }�(j< MVj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< MWj= Kuj> }�(j< MWj= Kuuj@ }�(j: }�(j< MWj= Kuj> }�(j< MWj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $metadata�j7 K
j8 }�(j: }�(j< MYj= Kuj> }�(j< MYj= Kuuj@ }�(j: }�(j< MYj= Kuj> }�(j< MYj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$chunkId�j7 K
j8 }�(j: }�(j< Maj= Kuj> }�(j< Maj= Kuuj@ }�(j: }�(j< Maj= Kuj> }�(j< Maj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< Mhj= Kuj> }�(j< Mhj= Kuuj@ }�(j: }�(j< Mhj= Kuj> }�(j< Mhj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j* jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< Mkj= Kuj> }�(j< Mkj= Kuuj@ }�(j: }�(j< Mkj= Kuj> }�(j< Mkj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j6 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$section�j7 K
j8 }�(j: }�(j< Mkj= K+uj> }�(j< Mkj= K3uuj@ }�(j: }�(j< Mkj= K+uj> }�(j< Mkj= K3uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jB jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< Mpj= Kuj> }�(j< Mpj= K!uuj@ }�(j: }�(j< Mpj= Kuj> }�(j< Mpj= K!uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jN jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$class�j7 K
j8 }�(j: }�(j< Mpj= K.uj> }�(j< Mpj= K4uuj@ }�(j: }�(j< Mpj= K.uj> }�(j< Mpj= K4uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jZ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< Mtj= Kuj> }�(j< Mtj= K!uuj@ }�(j: }�(j< Mtj= Kuj> }�(j< Mtj= K!uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jf jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$class�j7 K
j8 }�(j: }�(j< Mtj= K.uj> }�(j< Mtj= K4uuj@ }�(j: }�(j< Mtj= K.uj> }�(j< Mtj= K4uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jr jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$method�j7 K
j8 }�(j: }�(j< Mtj= KAuj> }�(j< Mtj= KHuuj@ }�(j: }�(j< Mtj= KAuj> }�(j< Mtj= KHuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j~ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �ensureInitialized�j7 Kj8 }�(j: }�(j< Myj= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M|j= Kuj> }�(j< M|j= K&uuj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �extractClassNameFromSource�j7 Kj8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K/uujQ ]�}�(j5 �$sourceFile�j7 K
j8 }�(j: }�(j< M�j= K0uj> }�(j< M�j= KBuuj@ }�(j: }�(j< M�j= K7uj> }�(j< M�j= KBuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uaj^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �generatePreview�j7 Kj8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K$uujQ ]�(}�(j5 �$content�j7 K
j8 }�(j: }�(j< M�j= K%uj> }�(j< M�j= K4uuj@ }�(j: }�(j< M�j= K,uj> }�(j< M�j= K4uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$query�j7 K
j8 }�(j: }�(j< M�j= K6uj> }�(j< M�j= KCuuj@ }�(j: }�(j< M�j= K=uj> }�(j< M�j= KCuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$previewLength�j7 K
j8 }�(j: }�(j< M�j= KEuj> }�(j< M�j= K]uuj@ }�(j: }�(j< M�j= KIuj> }�(j< M�j= KWuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$queryLower�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$contentLower�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $position�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$queryTerms�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$queryTerm�j7 K
j8 }�(j: }�(j< M�j= K$uj> }�(j< M�j= K.uuj@ }�(j: }�(j< M�j= K$uj> }�(j< M�j= K.uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $position�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $position�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j& jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$start�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j2 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$end�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j> jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$preview�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jJ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$preview�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jV jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �parseDocumentationFile�j7 Kj8 }�(j: }�(j< M�j= Kuj> }�(j< M!j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K+uujQ ]�(}�(j5 �$file�j7 K
j8 }�(j: }�(j< M�j= K,uj> }�(j< M�j= K8uuj@ }�(j: }�(j< M�j= K3uj> }�(j< M�j= K8uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jn jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< M�j= K:uj> }�(j< M�j= KEuuj@ }�(j: }�(j< M�j= KAuj> }�(j< M�j= KEuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jz jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$content�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$lines�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentClass�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentMethod�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$lineNumber�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$inSourceBlock�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$line�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= K uuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= K!uuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K!uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= K!uuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K!uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j
jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$inSourceBlock�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentClass�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j" jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j. jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$inSourceBlock�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j: jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentClass�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jF jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentMethod�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jR jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j^ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jj jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< M�j= K!uj> }�(j< M�j= K%uuj@ }�(j: }�(j< M�j= K!uj> }�(j< M�j= K%uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jv jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M�j= K3uj> }�(j< M�j= KBuuj@ }�(j: }�(j< M�j= K3uj> }�(j< M�j= KBuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentClass�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< M j= K!uj> }�(j< M j= K%uuj@ }�(j: }�(j< M j= K!uj> }�(j< M j= K%uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentClass�j7 K
j8 }�(j: }�(j< M j= K2uj> }�(j< M j= K?uuj@ }�(j: }�(j< M j= K2uj> }�(j< M j= K?uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentMethod�j7 K
j8 }�(j: }�(j< M
j= Kuj> }�(j< M
j= Kuuj@ }�(j: }�(j< M
j= Kuj> }�(j< M
j= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdk�j7 K
j8 }�(j: }�(j< M
j= K!uj> }�(j< M
j= K%uuj@ }�(j: }�(j< M
j= K!uj> }�(j< M
j= K%uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �
$currentClass�j7 K
j8 }�(j: }�(j< M
j= K2uj> }�(j< M
j= K?uuj@ }�(j: }�(j< M
j= K2uj> }�(j< M
j= K?uuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentMethod�j7 K
j8 }�(j: }�(j< M
j= KLuj> }�(j< M
j= KZuuj@ }�(j: }�(j< M
j= KLuj> }�(j< M
j= KZuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= Kuuj^ jc jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW je jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �parseGeneralDocumentation�j7 Kj8 }�(j: }�(j< M#j= Kuj> }�(j< Mnj= Kuuj@ }�(j: }�(j< M#j= Kuj> }�(j< M#j= K.uujQ ]�(}�(j5 �$file�j7 K
j8 }�(j: }�(j< M#j= K/uj> }�(j< M#j= K;uuj@ }�(j: }�(j< M#j= K6uj> }�(j< M#j= K;uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$key�j7 K
j8 }�(j: }�(j< M#j= K=uj> }�(j< M#j= KHuuj@ }�(j: }�(j< M#j= KDuj> }�(j< M#j= KHuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$content�j7 K
j8 }�(j: }�(j< M%j= Kuj> }�(j< M%j= Kuuj@ }�(j: }�(j< M%j= Kuj> }�(j< M%j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$lines�j7 K
j8 }�(j: }�(j< M+j= Kuj> }�(j< M+j= Kuuj@ }�(j: }�(j< M+j= Kuj> }�(j< M+j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j* jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M,j= Kuj> }�(j< M,j= Kuuj@ }�(j: }�(j< M,j= Kuj> }�(j< M,j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j6 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< M-j= Kuj> }�(j< M-j= Kuuj@ }�(j: }�(j< M-j= Kuj> }�(j< M-j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jB jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$lineNumber�j7 K
j8 }�(j: }�(j< M.j= Kuj> }�(j< M.j= Kuuj@ }�(j: }�(j< M.j= Kuj> }�(j< M.j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jN jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$line�j7 K
j8 }�(j: }�(j< M0j= Kuj> }�(j< M0j= K uuj@ }�(j: }�(j< M0j= Kuj> }�(j< M0j= K uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jZ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< M7j= Kuj> }�(j< M7j= Kuuj@ }�(j: }�(j< M7j= Kuj> }�(j< M7j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jf jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M;j= Kuj> }�(j< M;j= Kuuj@ }�(j: }�(j< M;j= Kuj> }�(j< M;j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jr jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$cleaned�j7 K
j8 }�(j: }�(j< M?j= Kuj> }�(j< M?j= Kuuj@ }�(j: }�(j< M?j= Kuj> }�(j< M?j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j~ jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M@j= Kuj> }�(j< M@j= Kuuj@ }�(j: }�(j< M@j= Kuj> }�(j< M@j= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MCj= Kuj> }�(j< MCj= Kuuj@ }�(j: }�(j< MCj= Kuj> }�(j< MCj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$cleaned�j7 K
j8 }�(j: }�(j< MEj= Kuj> }�(j< MEj= Kuuj@ }�(j: }�(j< MEj= Kuj> }�(j< MEj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MFj= Kuj> }�(j< MFj= Kuuj@ }�(j: }�(j< MFj= Kuj> }�(j< MFj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MHj= Kuj> }�(j< MHj= Kuuj@ }�(j: }�(j< MHj= Kuj> }�(j< MHj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$cleaned�j7 K
j8 }�(j: }�(j< MJj= Kuj> }�(j< MJj= Kuuj@ }�(j: }�(j< MJj= Kuj> }�(j< MJj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MKj= Kuj> }�(j< MKj= Kuuj@ }�(j: }�(j< MKj= Kuj> }�(j< MKj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MLj= Kuj> }�(j< MLj= Kuuj@ }�(j: }�(j< MLj= Kuj> }�(j< MLj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MPj= Kuj> }�(j< MPj= K#uuj@ }�(j: }�(j< MPj= Kuj> }�(j< MPj= K#uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MRj= Kuj> }�(j< MRj= K#uuj@ }�(j: }�(j< MRj= Kuj> }�(j< MRj= K#uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MSj= Kuj> }�(j< MSj= K#uuj@ }�(j: }�(j< MSj= Kuj> }�(j< MSj= K#uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< MWj= Kuj> }�(j< MWj= K'uuj@ }�(j: }�(j< MWj= Kuj> }�(j< MWj= K'uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$key�j7 K
j8 }�(j: }�(j< M\j= K!uj> }�(j< M\j= K%uuj@ }�(j: }�(j< M\j= K!uj> }�(j< M\j= K%uuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$currentSection�j7 K
j8 }�(j: }�(j< M\j= K3uj> }�(j< M\j= KBuuj@ }�(j: }�(j< M\j= K3uj> }�(j< M\j= KBuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j& jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< Mcj= Kuj> }�(j< Mcj= Kuuj@ }�(j: }�(j< Mcj= Kuj> }�(j< Mcj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j2 jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$buffer�j7 K
j8 }�(j: }�(j< Mgj= Kuj> }�(j< Mgj= Kuuj@ }�(j: }�(j< Mgj= Kuj> }�(j< Mgj= Kuuj^ j� jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j> jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uu}�(j5 �scanDocumentationFiles�j7 Kj8 }�(j: }�(j< Mpj= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< Msj= Kuj> }�(j< Msj= K+uujQ ]�(}�(j5 �$files�j7 K
j8 }�(j: }�(j< Myj= Kuj> }�(j< Myj= Kuuj@ }�(j: }�(j< Myj= Kuj> }�(j< Myj= Kuuj^ jK jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jV jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$file�j7 K
j8 }�(j: }�(j< Mj= Kuj> }�(j< Mj= K uuj@ }�(j: }�(j< Mj= Kuj> }�(j< Mj= K uuj^ jK jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jb jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 � $filename�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jK jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jn jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkName�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= Kuuj^ jK jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jz jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�u}�(j5 �$sdkName�j7 K
j8 }�(j: }�(j< M�j= Kuj> }�(j< M�j= K%uuj@ }�(j: }�(j< M�j= Kuj> }�(j< M�j= K%uuj^ jK jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW j� jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj\ ]�uej^ jI jS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jM jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uuejS }�(jU �Zfile:///Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jW jK jX �S/Users/evan/Developer/evansims/openfga-mcp/src/Documentation/DocumentationIndex.php�jZ jG uj^ NujS j_ jk jw j� j� j� j� j� j� j� j� j� j� j� j j j j( j4 j@ jL jX jd js j| j� j� j� j� j� j� j� j� j� j� j j j j' j0 j< jH jT j` jl jx j� j� j� j� j� j� j� j� j� j� j� j j j j/ j8 jD jP j\ jh jt j� j� j� j� j� j� j� j� j� j� j� j j j j( j4 j@ jL jX jd jp j| j� j� j� j� j� j� j� j� j� j� j j j j$ j0 j< jH jT jc jl jx j� j� j� j� j� j� j� j� j� j� j� j j j j, j8 jD jP j\ jh jt j� j� j� j� j� j� j� j� j� j� j� j j j j( j4 j@ jL jX jd jp j| j� j� j� j� j� j� j� j� j� j� j j j j$ j0 j< jK jT j` jl jx j� e]�(j4 jI e�����1tests/Unit/Tools/DocumentationToolsTest.php-False�� 0e485d967d6978dcf6a2168061ac6d8d�]�(}�(�name��Closure��kind�K�range�}�(�start�}�(�line�K� character�Ku�end�}�(j� M�j� Kuu�selectionRange�}�(j� }�(j� Kj� Kuj� }�(j� M�j� Kuu�children�]�(}�(j� �Closure�j� Kj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� �+tests/Unit/Tools/DocumentationToolsTest.php�uj� ]�u}�(j� �Closure�j� Kj� }�(j� }�(j� K
j� Kuj� }�(j� Kj� Kuuj� }�(j� }�(j� K
j� Kuj� }�(j� Kj� Kuuj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�u}�(j� �Closure�j� Kj� }�(j� }�(j� Kj� K$uj� }�(j� Klj� Kuuj� }�(j� }�(j� Kj� K$uj� }�(j� Klj� Kuuj� ]�(}�(j� �Closure�j� Kj� }�(j� }�(j� Kj� K,uj� }�(j� Kj� K uuj� }�(j� }�(j� Kj� K,uj� }�(j� Kj� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� Kj� K.uj� }�(j� Kj� K uuj� }�(j� }�(j� Kj� K.uj� }�(j� Kj� K uuj� ]�(}�(j� �$result�j� K
j� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�u}�(j� �$result�j� K
j� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj� }�(j� }�(j� Kj� Kuj� }�(j� Kj� Kuuj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uej j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� Kj� K0uj� }�(j� K"j� K uuj� }�(j� }�(j� Kj� K0uj� }�(j� K"j� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� K j� Kuj� }�(j� K j� Kuuj� }�(j� }�(j� K j� Kuj� }�(j� K j� Kuuj j! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� K$j� K4uj� }�(j� K(j� K uuj� }�(j� }�(j� K$j� K4uj� }�(j� K(j� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� K%j� Kuj� }�(j� K%j� Kuuj� }�(j� }�(j� K%j� Kuj� }�(j� K%j� Kuuj j$! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j/! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j&! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� K*j� K,uj� }�(j� K.j� K uuj� }�(j� }�(j� K*j� K,uj� }�(j� K.j� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� K+j� Kuj� }�(j� K+j� Kuuj� }�(j� }�(j� K+j� Kuj� }�(j� K+j� Kuuj j<! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� jG! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j>! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� K0j� K,uj� }�(j� K6j� K uuj� }�(j� }�(j� K0j� K,uj� }�(j� K6j� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� K1j� Kuj� }�(j� K1j� Kuuj� }�(j� }�(j� K1j� Kuj� }�(j� K1j� Kuuj jT! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j_! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� jV! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�� j� Kj� }�(j� }�(j� K8j� K.uj� }�(j� K>j� K uuj� }�(j� }�(j� K8j� K.uj� }�(j� K>j� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� K9j� Kuj� }�(j� K9j� Kuuj� }�(j� }�(j� K9j� Kuj� }�(j� K9j� Kuuj jl! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� jw! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� jn! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� K@j� K$uj� }�(j� KEj� K uuj� }�(j� }�(j� K@j� K$uj� }�(j� KEj� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� KAj� Kuj� }�(j� KAj� Kuuj� }�(j� }�(j� KAj� Kuj� }�(j� KAj� Kuuj j�! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� KGj� K%uj� }�(j� KLj� K uuj� }�(j� }�(j� KGj� K%uj� }�(j� KLj� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� KHj� Kuj� }�(j� KHj� Kuuj� }�(j� }�(j� KHj� Kuj� }�(j� KHj� Kuuj j�! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� KNj� K&uj� }�(j� KSj� K uuj� }�(j� }�(j� KNj� K&uj� }�(j� KSj� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� KOj� Kuj� }�(j� KOj� Kuuj� }�(j� }�(j� KOj� Kuj� }�(j� KOj� Kuuj j�! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� KUj� K*uj� }�(j� K_j� K uuj� }�(j� }�(j� KUj� K*uj� }�(j� K_j� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� KVj� Kuj� }�(j� KVj� Kuuj� }�(j� }�(j� KVj� Kuj� }�(j� KVj� Kuuj j�! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� Kaj� K2uj� }�(j� Kkj� K uuj� }�(j� }�(j� Kaj� K2uj� }�(j� Kkj� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� Kbj� Kuj� }�(j� Kbj� Kuuj� }�(j� }�(j� Kbj� Kuj� }�(j� Kbj� Kuuj j�! j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uj� ]�uaj j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j�! j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uuej j� j� }�(j� �]file:///Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� j� �V/Users/evan/Developer/evansims/openfga-mcp/tests/Unit/Tools/DocumentationToolsTest.php�j� j� uu}�(j� �Closure�j� Kj� }�(j� }�(j� Knj� K#uj� }�(j� K�j� Kuuj� }�(j� }�(j� Knj� K#uj� }�(j� K�j� Kuuj� ]�(}�(j� �Closure�j� Kj� }�(j� }�(j� Koj� K,uj� }�(j� Krj� K uuj� }�(j� }�(j� Koj� K,uj� }�(j� Krj� K uuj� ]�}�(j� �$result�j� K
j� }�(j� }�(j� Kpj� Kuj� }�(j� Kpj� Kuuj� }�(j� }�(j� Kpj� Kuj� }�(j� Kpj� Kuuj j"